Openssl 将中间证书添加到pkcs12文件
我有一份具有以下认证链的证书: 委托->我的CA->我的颁发CA->我的JBoss证书。现在,如果我在我的JBoss实例上安装了我的证书,那么在这个实例上运行的任何我访问的页面都将显示为不可信,因为我的浏览器无法识别我的颁发CA。我知道我的计算机具有委托签署机构的公钥。如何安装证书,以便任何浏览器都可以看到整个证书链 我制作了一个包含所有证书的.pem文件,认为这样做是可行的。事实并非如此。有人能解释我做错了什么,或者即使这是可能的吗 我有一个具有以下认证链的证书:委托->我的CA->我的颁发CA->我的JBoss证书 我想你有两个问题。第一个是会签CA,第二个是不完整的客户链 首先,简单的问题。服务器必须发送终端实体(服务器)证书和任何中间证书以构建所需链。服务器发送中间证书以避免“哪个目录”问题。“哪个目录”是PKI中众所周知的问题。本质上,客户端不知道去哪里获取丢失的中间证书 因此,您的第一个解决方案是让服务器发送一个包含以下内容的链:Openssl 将中间证书添加到pkcs12文件,openssl,ssl-certificate,jboss6.x,pkcs#12,Openssl,Ssl Certificate,Jboss6.x,Pkcs#12,我有一份具有以下认证链的证书: 委托->我的CA->我的颁发CA->我的JBoss证书。现在,如果我在我的JBoss实例上安装了我的证书,那么在这个实例上运行的任何我访问的页面都将显示为不可信,因为我的浏览器无法识别我的颁发CA。我知道我的计算机具有委托签署机构的公钥。如何安装证书,以便任何浏览器都可以看到整个证书链 我制作了一个包含所有证书的.pem文件,认为这样做是可行的。事实并非如此。有人能解释我做错了什么,或者即使这是可能的吗 我有一个具有以下认证链的证书:委托->我的CA->我的颁发C
- 您的中级证书(“我的颁发CA”)
- 您的服务器证书(“我的JBoss证书”)
我制作了一个包含所有证书的.pem文件,认为这样做是可行的。事实并非如此。有人能解释我做错了什么,或者即使这是可能的吗
在这种情况下,我们需要查看证书以了解发生了什么。你能发布一个服务于证书和使用链的URL吗;并将您的内部CA(“我的CA”)证书发布到网上 这里有一种快速而肮脏的方法来测试与OpenSSL的
s\u客户端的连接:
echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
-CAfile my-issuing-ca.pem
OpenSSL默认不信任任何东西(与浏览器不同),因此必须使用-CAfile
指定信任锚
该命令应以类似于以下内容的内容结束
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 37E5AF0EE1745AB2...
Session-ID-ctx:
Master-Key: 7B9F8A79D3CC3A41...
Key-Arg : None
Start Time: 1243051912
Timeout : 300 (sec)
Verify return code: 0 (ok)
如果OpenSSL命令的结果是OK,那么问题在于浏览器和信任点
正在将中间证书添加到pkcs12文件
下面是我如何在我的web和邮件服务器上执行此操作的
首先,www-example-com.crt
是Startcom签署的web服务器证书。Startcom提供免费的Class 1证书,这是我最信任的浏览器和移动设备,所以我使用它们。证书采用PEM格式(----开始证书---
和----结束证书---
)
其次,我打开www-example-com.crt
并附加Startcom的Class 1中间层。我从Startcom那里得到了中间体。现在,我的www example com.crt
中有两个PEM编码的证书
第三,我执行以下操作来创建用于IIS的PKCS12/PFX文件
openssl pkcs12 -export -in www-example-com.crt -inkey www.example.key -out www-example-com.p12
在您的情况下,您的www example com.crt
将至少包含三个PEM编码的证书:
----- BEGIN CERT -----
< My JBoss Certificate >
----- END CERT -----
----- BEGIN CERT -----
< My Issuing CA >
----- END CERT -----
----- BEGIN CERT -----
< My CA >
----- END CERT -----
委托人在提供其CA和中级证书。我不能告诉你你需要哪一个,因为你不会提供一个URL或向我们展示你的链接。但我猜它将是一个或多个:
- 委托L1E链证书
- 委托L1C链证书
- 委托L1E链条证书(SHA2)
- 委托L1C链条证书(SHA2)
您可以使用OpenSSL的` s_客户端测试您的链。这一次,您将使用委托人的认证:
echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
-CAfile entrust-ca.pem
您可以从中获取trustate-ca.pem
。运行它并告诉我们您遇到了哪些错误。或者更好的办法是,将URL发布到您的服务器上,这样我们就可以看到发生了什么。我的客户确实信任我。委托包含在所有主要浏览器的信任库中。我创建了一个pkcs12文件,其中包括委托、我的CA、我的颁发CA和我的服务器的所有公钥以及我的服务器的私钥。当我使用openssl s_客户端-主机“server.com”-端口443-showcerts查询我的服务器时,我只看到我的证书。“在这种情况下,我们需要查看证书以了解发生了什么。你能发布一个服务于证书并使用该链的URL吗?并将你的内部CA(“我的CA”)证书发布到网上吗?”我不能,很遗憾,这没有帮助。当我在一个pen文件中包含所有证书并查询我的服务器时,我成功地运行了openssl命令。该命令能够解析服务器的证书和权限。“…所有委托的公钥,我的CA,我的颁发CA…”-这里有两件事。(1) 证书链需要证书,而不是公钥。文件中证书的顺序有时很重要。(2) 证书链不需要委托;如果您已在托管工作站和设备中预加载了您组织的CA证书,则不需要“我的CA”。“当我使用openssl s_客户端查询我的服务器时…”-您使用什么来-CAfile
??连接我的pem编码证书链(减去委托)工作成功。通过将我公司的ca、我公司的ca签名机构和我的box证书连接到一个pem.crt中,我能够与我的JBoss实例建立一个安全的http连接,然后将它与我的box私钥一起导出到pkcs12文件中。
echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
-CAfile entrust-ca.pem