首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PCKS#12证书与非ASCII码配合使用

将PCKS#12证书与非ASCII码配合使用
EN

Stack Overflow用户
提问于 2019-01-02 03:27:03
回答 2查看 3.8K关注 0票数 4

我试图打开PKCS#12文件,但因为密码不是ASCII (包含抛光字符),所以在执行KeyStore.load()时出现"Password is not ASCII“异常。使用此证书有什么解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2020-01-20 18:41:11

RFC 7292指定对密码的ASCII码和UTF8编码的支持仅作为推荐。

Java API仅支持ASCII密码。

因此,解决方法是更改密钥库密码。

示例

生成私钥和证书

代码语言:javascript
复制
openssl 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"

使用非ASCII码(пароль)创建PKCS12密钥库

代码语言:javascript
复制
openssl pkcs12 -export -in cert.pem -inkey key.pem -out keystore.p12 -password pass:пароль

使用OpenSSL获取PKCS12密钥库信息

代码语言:javascript
复制
openssl pkcs12 -info -in keystore.p12 -noout -password pass:пароль

尝试使用Java keytool获取密钥库信息会导致异常Password is not ASCII

代码语言:javascript
复制
keytool -list -v -keystore keystore.p12 -storepass пароль -storetype PKCS12

java.io.IOException: keystore password was incorrect
    at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2108)
    at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
    at java.base/java.security.KeyStore.load(KeyStore.java:1479)
    at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:946)
    at java.base/sun.security.tools.keytool.Main.run(Main.java:397)
    at java.base/sun.security.tools.keytool.Main.main(Main.java:390)
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: Password is not ASCII

因此,必须更改密钥库密码。没有简单的方法可以使用OpenSSL更改PKCS12密钥库密码。必须将现有的密钥库转换为PEM,并使用新密码创建新的密钥库

代码语言:javascript
复制
openssl pkcs12 -in keystore.p12 -out keystore.txt -nodes -password pass:пароль
openssl pkcs12 -export -in keystore.txt -out newkeystore.p12 -password pass:password
rm keystore.txt

不要忘记执行最后一步来删除未加密的PEM密钥。

现在,可以使用OpenSSL和Java keytool获取keytool信息

代码语言:javascript
复制
openssl pkcs12 -info -in newkeystore.p12 -noout -password pass:password
keytool -list -v -keystore newkeystore.p12 -storepass password -storetype PKCS12

Your keystore contains 1 entry

通常,最好使用Java keytool来更改密钥库密码,如答案https://stackoverflow.com/a/50900084/7873775中所述

代码语言:javascript
复制
keytool -storetype pkcs12 -keystore newkeystore.p12 -storepasswd -storepass password -new newpassword

但它不适用于使用非ASCII密码的密钥库。

票数 3
EN

Stack Overflow用户

发布于 2021-07-06 23:05:00

我已将密码"889002333“更改为"amrajat”,并解决了错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53998300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档