我的证书具有以下认证链: Entrust->我的CA->我的发行CA->我的JBoss证书。现在,如果我在我的JBoss实例上安装我的证书,那么我在此实例上运行的任何页面都将显示为不可信,因为我的浏览器无法识别我的颁发CA.我知道我的计算机拥有Entrust签名权限的公钥。如何安装我的证书,以便任何浏览器都可以看到整个证书链?
我制作了一个包含所有证书的.pem文件。它没。谁能解释我做错了什么,或者即使这是可能的?
答案 0 :(得分:21)
将中间证书添加到pkcs12文件中......
以下是我在网络和邮件服务器上的操作方法。
首先,www-example-com.crt
是由Startcom签署的Web服务器证书。 Startcom提供免费的Class 1证书,可以信赖我的大多数浏览器和移动设备,因此我使用它们。证书采用PEM格式(----- BEGIN CERT -----
和----- END CERT -----
)。
其次,我打开www-example-com.crt
并附加Startcom的Class 1 Intermediate。我从Startcom的Index of /certs获得了中级。现在我的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 -----
链中的第三个证书 - My CA
- 是可选的。如果您的客户使用My CA
作为信任锚,则不需要它。如果您的客户使用Entrust
作为信任锚,则需要包含它。
如果您cat
www-example-com.crt
且 NOT 有多个证书,则请勿继续。在服务器证书具有验证链所需的所有必需中间证书之前,请不要执行openssl pkcs12
。
不要包含Entrust CA证书。
我怀疑Entrust直接与他们的CA签约。他们也可能使用中间体。所以你的证书链可能应该是这样的:
----- BEGIN CERT -----
< My JBoss Certificate >
----- END CERT -----
----- BEGIN CERT -----
< My Issuing CA >
----- END CERT -----
----- BEGIN CERT -----
< My CA >
----- END CERT -----
----- BEGIN CERT -----
< Entrust Intermediate >
----- END CERT -----
Entrusts在Entrust Root Certificates提供其CA和中级证书。我无法告诉您需要哪一个,因为您不会提供URL或向我们展示您拥有的链。但我猜它将成为一个或多个:
您可以使用OpenSSL的`s_client测试您的链。这次,您将使用Entrust的证书:
echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
-CAfile entrust-ca.pem
您可以从Entrust Root Certificates获取entrust-ca.pem
。运行它并告诉我们你得到了什么错误。或者更好的是,将URL发布到您的服务器,以便我们可以看到正在发生的事情。
答案 1 :(得分:0)
我的证书具有以下认证链:Entrust-&gt;我的CA-&gt;我的签发CA-&gt;我的JBoss证书......
我认为你有两个问题。第一个是会签的CA,第二个是不完整的客户链。
首先,容易出问题。服务器必须将最终实体(服务器)证书和任何中间证书发送到所需的构建链。服务器发送中间证书以避免&#34;哪个目录&#34;问题。 &#34;哪个目录&#34;是PKI中众所周知的问题。从本质上讲,客户端不知道从哪里获取缺少的中间证书。
因此,您的第一个解决方案是服务器发送链:
其次,您遇到了不受信任的发行人的问题。客户必须信任您的内部颁发CA.
因此,您的第二个解决方案是确保您的客户信任您的内部CA(&#39;我的CA&#39;)。在这种情况下,客户端甚至不需要使用Entrust,因为信任点植根于您的内部CA.
您可以让服务器通过“我的CA”,“我的发行CA”和“发布CA”来发送链。和我的JBoss证书&#39;。在这种情况下,客户必须信任'Entrust&#39;
如果客户不信任Entrust&#39;或者&#39;我的CA&#39;,然后您将收到验证错误。
我制作了一个包含所有证书的.pem文件。它没。谁能解释我做错了什么,或者即使这是可能的?
在这种情况下,我们需要查看证书以查看正在进行的操作。您是否可以发布提供证书并使用链的URL;并在线发布内部CA(&#39;我的CA&#39;)证书?
这是一种快速而肮脏的方法来测试与OpenSSL s_client
的连接:
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,则问题出在浏览器和信任点上。