android keymaster 导入私钥和证书,问题记录

报错1:

Public Key Algorithm: id-ecPublicKey
Unable to load Public Key
12970367423966767448:error:0f000080:elliptic curve routines:OPENSSL_internal:DECODE_ERROR:external/boringssl/src/crypto/ec_extra/ec_asn1.c:327:
12970367423966767448:error:06000066:public key routines:OPENSSL_internal:DECODE_ERROR:external/boringssl/src/crypto/evp/p_ec_asn1.c💯
12970367423966767448:error:0b00007d:X.509 certificate routines:OPENSSL_internal:PUBLIC_KEY_DECODE_ERROR:external/boringssl/src/crypto/x509/x_pubkey.c:159:

主要是生成的证书公钥没有被正确解析,使用的 openssl 命令有问题,需要使用正确的与android keymaster 库兼容的命令。

比如:

生成 PKCS#8 私钥

openssl ecparam -name prime256v1 -out ec_param.pem
openssl genpkey -paramfile ec_param.pem -out ec_private_pkcs8.pem

生成自签名证书

openssl req -new -key ec_private_pkcs8.pem -out ec_cert.csr -subj “/CN=Android ECDSA Key/O=My App”
openssl x509 -req -days 3650 -in ec_cert.csr -signkey ec_private_pkcs8.pem -out ec_cert.pem

报错2:

FATAL EXCEPTION: main
Process: com.quectel.keystore, PID: 6306
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6357)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6357) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6357)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6352) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: private key algorithm does not match algorithm of public key in end entity certificate (at index 0)
at com.quectel.keystore.MainActivity.importECDSAPrivateKey(MainActivity.java:89)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6352) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.lang.IllegalArgumentException: private key algorithm does not match algorithm of public key in end entity certificate (at index 0)
at java.security.KeyStorePrivateKeyEntry.<init>(KeyStore.java:594)atjava.security.KeyStorePrivateKeyEntry.<init>(KeyStore.java:594) at java.security.KeyStorePrivateKeyEntry.<init>(KeyStore.java:594)atjava.security.KeyStorePrivateKeyEntry.(KeyStore.java:543)
at com.quectel.keystore.KeyStoreUtils.importEcKey(KeyStoreUtils.java:719)
at com.quectel.keystore.MainActivity.importECDSAPrivateKey(MainActivity.java:86)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6352) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
这个问题和 #### 问题1 ####是同一个原因。

问题3

FATAL EXCEPTION: main
Process: com.quectel.keystore, PID: 6188
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6357)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6357) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6357)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6352) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.lang.RuntimeException: java.security.spec.InvalidKeySpecException: To generate a key pair in Android Keystore, use KeyPairGenerator initialized with android.security.keystore.KeyGenParameterSpec
at com.quectel.keystore.MainActivity.importECDSAPrivateKey(MainActivity.java:89)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.ViewDeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.−DeclaredOnClickListener.onClick(View.java:6352) at android.view.View.performClick(View.java:7542) at android.view.View.performClickInternal(View.java:7519) at android.view.View.-DeclaredOnClickListener.onClick(View.java:6352)atandroid.view.View.performClick(View.java:7542)atandroid.view.View.performClickInternal(View.java:7519)atandroid.view.View.NestNestNestmperformClickInternal(Unknown Source:0)
at android.view.ViewPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitPerformClick.run(View.java:29480) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7964) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInitPerformClick.run(View.java:29480)atandroid.os.Handler.handleCallback(Handler.java:942)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loopOnce(Looper.java:201)atandroid.os.Looper.loop(Looper.java:288)atandroid.app.ActivityThread.main(ActivityThread.java:7964)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: java.security.spec.InvalidKeySpecException: To generate a key pair in Android Keystore, use KeyPairGenerator initialized with android.security.keystore.KeyGenParameterSpec
at android.security.keystore2.AndroidKeyStoreKeyFactorySpi.engineGeneratePrivate(AndroidKeyStoreKeyFactorySpi.java:123)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:393)
at com.quectel.keystore.KeyStoreUtils.importEcKey(KeyStoreUtils.java:700)
at com.quectel.keystore.MainActivity.importECDSAPrivateKey(MainActivity.java:86)

// 解析外部私钥(使用标准 JCE)
KeyFactory ecKeyFactory = KeyFactory.getInstance(“EC”); // 不要用 AndroidKeyStore Provider

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值