首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用openssl创建.p12信任库

用openssl创建.p12信任库
EN

Stack Overflow用户
提问于 2017-03-13 15:06:52
回答 2查看 14.9K关注 0票数 10

我正在编写一个Java 8应用程序,并希望使用一个自签名证书来设置一个简单的密钥库和信任存储库。

通常情况如下:

  1. 使用openssl创建键盘+证书。
  2. 使用.jks创建一个.jks密钥库+ keytool信任库

现在,我只想使用openssl并创建.p12密钥存储,而不是.jks密钥存储。

使用以下命令创建.p12密钥存储库非常有效:

代码语言:javascript
复制
# 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信任库工作。

我试着按照建议的这里创建信任库

代码语言:javascript
复制
# Create .p12 truststore
openssl pkcs12 -export -nokeys -in "${cert}" -out "${truststore}"

然后像这样加载它:

代码语言:javascript
复制
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信任库的工作片段。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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>

来源:

票数 17
EN

Stack Overflow用户

发布于 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>属性:

代码语言:javascript
复制
keytool -storepass '***' -import -alias ca -file ***/ca.crt.pem -keystore ***/ca.p12 -deststoretype PKCS12

此命令将附加的PEM编码证书及其私钥转换为PKCS12:

代码语言:javascript
复制
openssl pkcs12 -in ***/additional.cert.pem -inkey ***/additional.key.pem -name additional -export -out ***/additional.p12

此命令将包含CA证书的PKCS12密钥存储库与包含附加密钥及其私钥的PKCS12密钥存储库合并:

代码语言:javascript
复制
keytool -importkeystore -srckeystore ***/ca.p12 -srcstoretype pkcs12 -srcstorepass '***' -destkeystore ***/additional.p12 -deststoretype pkcs12 -deststorepass '***'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42766935

复制
相关文章

相似问题

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