我有一个证书,其认证链如下:Entrust -> 我的CA -> 我的发行CA -> 我的JBoss证书。现在,如果我在我的JBoss实例上安装了我的证书,那么我访问的任何页面都将显示为不受信任,因为我的发行CA未被浏览器识别。我知道我的计算机拥有Entrust签名机构的公钥。我应该如何安装我的证书,以便任何浏览器都可以看到整个证书链?
我制作了一个所有证书的单个.pem文件,希望这样做可以解决问题。但是它并没有起作用。是否有人能够解释我做错了什么,或者是否有可能实现这一目标?
我有一个证书,其认证链如下:Entrust -> 我的CA -> 我的发行CA -> 我的JBoss证书。现在,如果我在我的JBoss实例上安装了我的证书,那么我访问的任何页面都将显示为不受信任,因为我的发行CA未被浏览器识别。我知道我的计算机拥有Entrust签名机构的公钥。我应该如何安装我的证书,以便任何浏览器都可以看到整个证书链?
我制作了一个所有证书的单个.pem文件,希望这样做可以解决问题。但是它并没有起作用。是否有人能够解释我做错了什么,或者是否有可能实现这一目标?
如何将中间证书添加到pkcs12文件中...
以下是我在我的Web和邮件服务器上的操作方式。
首先,www-example-com.crt
是由Startcom签名的Web服务器证书。Startcom提供免费的Class 1证书,大多数浏览器和移动设备都可以信任,所以我使用它们。该证书采用PEM格式(----- BEGIN CERT -----
和----- END CERT -----
)。
第二步,我打开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 -----
证书链中的第三张证书 - My CA
- 是可选的。如果你的客户端使用My CA
作为信任锚点,那么你就不需要它。如果你的客户端使用Entrust
作为信任锚点,那么你需要将其包含在内。
如果你cat
你的www-example-com.crt
并且它没有多个证书,则不要继续。在你的服务器证书具备验证证书链所需的所有必要中间证书之前,不要执行openssl pkcs12
操作。
不要包含Entrust CA证书。
我怀疑Entrust也会使用一个中间证书进行签名。因此,你的证书链可能看起来像:
----- 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 -----
Entrust提供他们的CA和中间证书,网址为Entrust根证书。我无法告诉你需要哪一个,因为你没有提供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发布到你的服务器上,这样我们就能看到发生了什么。
您可以让服务器发送一个包含'My CA'、'My Issuing CA'和'My JBoss Certificate'的证书链。在这种情况下,客户端必须信任'Entrust'。
如果客户端不信任'Entrust'或'My CA',则会出现验证错误。
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)
-CAfile
??? - jww