我收到了一堆需要安装到 tomcat 服务器的 SSL 证书,通常这很容易。但是,这些证书的私钥已在其他地方生成,并与私钥和所有 SSL 证书一起移交给我。
Keytool 不允许我直接导入私钥,因此我无法按照标准流程生成私钥,然后将其发送出去以获取证书。我发现了另一个问题'https://stackoverflow.com/questions/906402/importing-an-existing-x509-certificate-and-private-key-in-java-keystore-to-use-i' 我能够遵循并设法让密钥库与 Tomcat 一起工作。但是,似乎中间证书没有正确关联,因此 SSL 检查实际上失败了。
这是我所做的:
- keytool -import -trustcacerts -alias Primary -file Primary.crt -keystore keystore.key
- keytool -import -trustcacerts -alias Secondary -file Secondary.crt -keystore keystore.key
- openssl pkcs12 -export -in 域.crt -inkey 域.key > server.p12
- keytool -importkeystore -srckeystore server.p12 -destkeystore keystore.key -srcstoretype pkcs12
因此,即使我已经导入了主要和次要中间证书,但它们似乎并不是导入的 pkcs12 生成证书链的一部分。
SSL 检查器发出的错误消息
请在您的 Web 或应用程序服务器上安装或替换以下中级 CA 证书,然后再次执行此测试。
------证书 2------
--颁发给--组织:Thawte, Inc.
组织单位:域验证 SSL
通用名称:Thawte DV SSL
CA国家:美国
-- 发布者 -- 组织:thawte, Inc.
组织单位:(c) 2006 thawte, Inc. - 仅供授权使用
组织单位 2:认证服务司
通用名称:thawte Primary Root CA 国家:美国
答案1
一些应用程序(我不记得 Tomcat 是否是其中之一)喜欢将证书链作为与服务器证书相同的密钥库条目的一部分,而不是作为单独的项目。
为此,首先从密钥库中删除两个 CA 证书:
keytool -delete -alias Primary -keystore keystore.key
keytool -delete -alias Secondary -keystore keystore.key
接下来,创建一个包含您的证书及其 CA 链的 PKCS#7 文件:
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile Secondary.crt \
-certfile Primary.crt -out domain.p7b
然后将其导入到您现有的密钥库(这将覆盖证书,但保留现有的私钥):
keytool -importcert -alias domain -file domain.p7b -keystore keystore.key
确保您指定的别名与密钥库中已有的证书/密钥的别名匹配。
现在,密钥库列表 ( keytool -list -keystore keystore.key
) 应将证书及其 CA 链显示为单个密钥库条目。