我们目前正在开发Java客户端应用,该应用可与
通过SSL安全连接的服务器。我们的设计要求服务器
通过使用受信任的证书对客户端进行身份验证。的
证书链如下所示:
<SOME CA Root certificate>
+- <SOME CA Intermediate certificate>
+- <Our companies certificate>
最初,我们认为这很简单:生成一个任意的空密钥库,
导入CA-root,CA-intermediate,最后是我们自己的证书,分发
此密钥库在客户端之间完成。为此,我们使用了pem文件
包含已签名的公钥。导入CA根密钥后,我们告诉了
将其标记为受信任的密钥库。
但是,对
keystore.getCertificateChain
的每次访问都会返回null
。我们已经通过
keytool
和KeyStoreExplorer
检查了所有证书可以在密钥库中按预期使用(它们是),并且
相应主题和授权密钥匹配的密钥标识符(可以)。我们
还请确保以正确的顺序完成导入:第一个CA,
然后是中级,然后是我们公司的证书。
我们去了我们自己的公司网站(firefox说,证书是
好),然后从此处下载整个证书链(以pem格式)到规则
原来的pem文件已损坏,但没有任何变化。
我们哪里错了?我们是否必须显式设置证书链?怎么样
我们可以获取详细信息吗,
getCertificateChain
中的哪个步骤失败了? 最佳答案
您需要将链的根证书导入为受信任的CA证书。不是整个链。 KeyStore.getCertificateChain()
仅适用于私钥条目,而不适用于私钥条目。