Pio*_*r S 5 java pkcs#12 java-security
我尝试打开 PKCS#12 文件,但由于密码不是 ASCII(包含波兰语字符),因此在执行 KeyStore.load() 时出现“密码不是 ASCII”异常。使用这个证书有什么解决办法吗?
RFC 7292指定密码支持 ASCII 和 UTF-8 编码仅作为建议。
\nJava API仅支持 ASCII 密码。
\n因此,解决方法是更改密钥库密码。
\n生成私钥和证书
\nopenssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=test/C=CH/ST=Zurich/L=Zurich/O=Test Org/OU=Test Unit"\nRun Code Online (Sandbox Code Playgroud)\n使用非 ASCII 密码创建 PKCS 12 密钥库 (\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c )
openssl pkcs12 -export -in cert.pem -inkey key.pem -out keystore.p12 -password pass:\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c\nRun Code Online (Sandbox Code Playgroud)\n使用 OpenSSL 获取 PKCS 12 密钥库信息
\nopenssl pkcs12 -info -in keystore.p12 -noout -password pass:\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c\nRun Code Online (Sandbox Code Playgroud)\n尝试使用 Java 获取密钥库信息keytool导致异常Password is not ASCII
keytool -list -v -keystore keystore.p12 -storepass \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c -storetype PKCS12\n\njava.io.IOException: keystore password was incorrect\n at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2108)\n at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)\n at java.base/java.security.KeyStore.load(KeyStore.java:1479)\n at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:946)\n at java.base/sun.security.tools.keytool.Main.run(Main.java:397)\n at java.base/sun.security.tools.keytool.Main.main(Main.java:390)\nCaused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: Password is not ASCII\nRun Code Online (Sandbox Code Playgroud)\n因此,必须更改密钥库密码。\n没有使用 OpenSSL 更改 PKCS 12 密钥库密码的简单方法。\n必须将现有密钥库转换为 PEM,并且必须创建具有新密码的新密钥库
\nopenssl pkcs12 -in keystore.p12 -out keystore.txt -nodes -password pass:\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c\nopenssl pkcs12 -export -in keystore.txt -out newkeystore.p12 -password pass:password\nrm keystore.txt\nRun Code Online (Sandbox Code Playgroud)\n不要忘记执行最后一步以删除未加密的 PEM 密钥。
\n现在,可以使用 OpenSSL 和 Java keytool 获取 keytool 信息
\nopenssl pkcs12 -info -in newkeystore.p12 -noout -password pass:password\nkeytool -list -v -keystore newkeystore.p12 -storepass password -storetype PKCS12\n\nYour keystore contains 1 entry\nRun Code Online (Sandbox Code Playgroud)\n通常,最好使用 Java keytool 来更改密钥库密码,如答案中所述/sf/answers/3563005911/中所述
\nkeytool -storetype pkcs12 -keystore newkeystore.p12 -storepasswd -storepass password -new newpassword\nRun Code Online (Sandbox Code Playgroud)\n但它不适用于具有非 ASCII 密码的密钥库。
\n| 归档时间: |
|
| 查看次数: |
5747 次 |
| 最近记录: |