我也有同样的问题。我花了大约一个月时间才搞清楚。
The tl;dr is this:
$ openssl pkcs12 -nodes < your.p12 > /tmp/certbag.pem
$ openssl pkcs12 -export -legacy -in /tmp/certbag.pem > /tmp/legacy.p12
Then use legacy.p12
.
显然,安卓无法导入较新的pkcs12文件。我在安卓12和安卓13上试了一下。这是man openssl-pkcs12
对-legacy
所说的。
在传统模式下,证书加密的默认算法是RC2_CBC或3DES_CBC,取决于在构建中是否启用了RC2密码。私钥加密的默认算法是3DES_CBC。 如果没有指定遗留选项,则不加载遗留提供程序,证书和私钥的默认加密算法为AES_256_CBC,密钥推导为PBKDF2。
在我的案例中使用openssl pkcs12 -info
,我在原始的.p12文件上看到了这个,这个文件是用Python的PyCryptography PKCS12支持创建的。
MAC: sha256, Iteration 1
MAC length: 32, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 20000
在转换后的.p12文件上使用openssl pkcs12 -info -legacy
,我看到了这个。
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
原有的那个无法导入,而转换后的(传统的)则导入得很好。