我正在编写一个Java 8应用程序,并希望使用一个自签名证书来设置一个简单的密钥库和信任存储库。
通常情况如下:
openssl创建键盘+证书。keytool信任库现在,我只想使用openssl并创建.p12密钥存储,而不是.jks密钥存储。
使用以下命令创建.p12密钥存储库非常有效:
# Create private key and certificate
openssl req -x509 -newkey rsa:"${rsa}" -sha256 \
-keyout "${key}" \
-out "${cert}" \
-days "${days}"
# Create .p12 keystore
openssl pkcs12 -export -in "${cert}" -inkey "${key}" -out "${keystore}"这个密钥库似乎工作正常,因为在我的.jks应用程序中提供相应的TLS信任存储将使TLS连接正常运行。然而,我无法让.p12信任库工作。
我试着按照建议的这里创建信任库
# Create .p12 truststore
openssl pkcs12 -export -nokeys -in "${cert}" -out "${truststore}"然后像这样加载它:
FileInputStream fis = new FileInputStream(new File(trustorePath));
KeyStore trustStore = KeyStore.getInstance("PKCS12");
trustStore.load(fis, truststorePassword.toCharArray());
fis.close();但是,我在java代码中收到了以下异常:
意外错误: java.security.InvalidAlgorithmParameterException: trustAnchors参数必须为非空
知道我做错什么了吗?
(非常希望使用Java8使用.p12信任库的工作片段。)
发布于 2017-03-22 18:06:00
对这种行为的可能解释:
Java 7之前的标准PKCS#12提供程序根本不允许可信的证书条目。JSSE参考指南指出: 不支持在PKCS12密钥存储库中存储受信任的证书。PKCS12主要用于传递带有相关证书链的私钥。它没有任何“受信任”证书的概念。在互操作性方面,其他PKCS12供应商也有同样的限制。像Mozilla和Internet这样的浏览器不接受只有可信证书的PKCS12文件。 这在Java8中发生了一些变化,它支持PKCS#12中的受信任证书--如果它们被标记为特殊属性(OID 2.16.840.1.113894.746875.1.1): openssl pkcs12 -in microsoft.p12 -info -info迭代1024 MAC验证了OK PKCS7加密数据: pbeWithSHA1And40BitRC2-CBC,迭代1024证书袋属性friendlyName: microsoft sha2 (巴尔的摩网络信任根目录) 2.16.840.1.113894.746875.1.1:<不支持的标记6>
来源:
发布于 2021-12-14 11:02:28
我还没有找到使用openssl的方法,尽管我已经找到了使用keytool ( OpenJDK套件的一部分)来实现它的方法。
我需要创建一个密钥存储库,它将包含带有2.16.840.1.113894.746875.1.1: <Unsupported tag 6>属性的CA证书,以及没有此属性的附加证书及其密钥。我想和其他人分享这个解决方案,他们可以通过谷歌openssl "2.16.840.1.113894.746875.1.1" :-)找到这个页面。)
此命令创建一个带有CA证书的PKCS12 (假设您已经拥有一个CA),该证书具有2.16.840.1.113894.746875.1.1: <Unsupported tag 6>属性:
keytool -storepass '***' -import -alias ca -file ***/ca.crt.pem -keystore ***/ca.p12 -deststoretype PKCS12此命令将附加的PEM编码证书及其私钥转换为PKCS12:
openssl pkcs12 -in ***/additional.cert.pem -inkey ***/additional.key.pem -name additional -export -out ***/additional.p12此命令将包含CA证书的PKCS12密钥存储库与包含附加密钥及其私钥的PKCS12密钥存储库合并:
keytool -importkeystore -srckeystore ***/ca.p12 -srcstoretype pkcs12 -srcstorepass '***' -destkeystore ***/additional.p12 -deststoretype pkcs12 -deststorepass '***'https://stackoverflow.com/questions/42766935
复制相似问题