android - 使用 UICC 运营商特权证书签署应用程序

标签 android telephonymanager apdu sim-card globalplatform

我正在阅读关于这个的信息link关于签署具有运营商特权的申请。

我知道如何使用 keystore 为生产版本的应用程序签名,但如何将 UICC 证书添加到我的应用程序以便它获得运营商特权?

我的主要目标是能够调用 TelephonyManager功能如:

iccOpenLogicalChannel
iccCloseLogicalChannel
iccTransmitApduLogicalChannel
iccTransmitApduBasicChannel

这是调用上述函数之一时得到的堆栈跟踪:

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.xxxx, PID: 2668
E/AndroidRuntime: java.lang.SecurityException: No modify permission or carrier privilege.
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1599)
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1552)
E/AndroidRuntime:     at com.android.internal.telephony.ITelephony$Stub$Proxy.iccOpenLogicalChannel(ITelephony.java:2966)
E/AndroidRuntime:     at android.telephony.TelephonyManager.iccOpenLogicalChannel(TelephonyManager.java:2914)
E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

提前致谢!

最佳答案

您应该问自己的问题实际上是一个不同的问题:我如何将我的应用程序签名 key 的证书放入 UICC?一旦您有了证书,实际的签名过程就没有什么不同了与任何其他 keystore 相比。

因此,您将拥有一个 keystore ,其中包含您的签名 key 对和该 key 的证书。该证书可以是自签名证书(通常是 Android 应用程序签名 key 的情况),也可以是 UICC 所有者(MNO/运营商)颁发给您的证书。在第一种情况下,您需要说服 UICC 所有者将该自签名证书添加到您的 UICC 上的访问控制列表(/应用程序)中。在第二种情况下,运营商通常会将与颁发给您的证书相对应的根证书包含在 UICC 中。

然后您可以使用该 keystore 来签署应用程序(就像您通常做的那样)。

关于android - 使用 UICC 运营商特权证书签署应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33551420/

相关文章:

java - 如何从 Java 的 EMV 智能卡读取 PAN

apdu - EMV - 带有 PDOL 的 GPO

java - 如何设置拨出电话延迟

android - 如何在Android中检索SIM卡IMSI?

android - 使用两个不同的 Activity 编辑 sharedPreferences 以影响第三个 Activity 的更改

android - tesseract ANDROID 中的黑名单和白名单

android - 获取国家代码

c++ - 在 C++ 中测量 APDU 命令到 Java Card 的时间的最佳方法

java - JNI 在 android/java 中解析 jstring 或 char* 而不使用 std

java - 如何返回 DataSnapshot 值作为方法的结果?