keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt
keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配
我已完全按照本 Apple 技术说明中的说明进行操作。
https://developer.apple.com/library/mac/technotes/tn2326/_index.html
这使我能够创建自己的 CA 身份,然后使用该 CA 为我的内部服务器颁发 SSL 证书(全部通过 Apple 的钥匙串完成)。在服务器(Tomcat 6)上,我使用
keytool
导入 .p12
(从 Apple 的钥匙串导出)并将其合并到稍后在 Tomcat 中配置的新 .jks
密钥库中。一切都很好。
然而,我遇到的所有指南和文档,甚至是 Tomcat 本身的指南和文档,都说从 keytool
生成
CSR,然后将 CA 的响应证书导入回
.jks
。出于多种原因,我想通过证书签名请求方法来做到这一点,但我已经努力让它工作几天了。
我的步骤是:
将自己的 CA 导出为
myCA.cer
,如第一个链接中所述。来自 Tomcat 的服务器计算机:
keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks
<tomcat>
的密钥密码: keystorepasskeytool -certreq -alias tomcat -keyalg -RSA -keystore keystore.jks -file secure.mysite.com.csr
接下来我打开Apple
Keychain Access
> Certificate Assistant
> Create a Certificate For Someone Else as a Certificate Authority...
secure.mysite.com.csr
拖到所需区域secure.mysite.com
为
secure.mysite.com
现在我的钥匙串中有
secure.mysite.com
(证书和私钥)。我将
secure.mysite.com
导出为 .p12
(如链接文档中所示)然后我提取证书和密钥:
openssl pkcs12 -in secure.mysite.com.p12 -nokeys -out secure.mysite.com.crt
openssl pkcs12 -in secure.mysite.com.p12 -nocerts -nodes -out secure.mysite.com.key
最后,我尝试将证书导入回密钥库
keytool -import -alias root -keystore keystore.jks -trustcacerts -file myCA.cer
keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt
我尝试过导入和不导入
myCA.cert
。secure.mysite.com
格式从钥匙串导出 .cer
。我在这里缺少什么?
您需要按照 root 的顺序安装证书,然后是中间证书,最后是您自己的个人服务器密钥。 您可以通过查看为您颁发的证书并查看信息来检查链的顺序。
根据您执行的步骤,您首先创建了一个密钥库(其中生成了私钥),然后尝试将证书导入到密钥库中。但是在命令中您没有使用使用
openssl
转换的私钥;您使用了生成密钥库时新生成的私钥。
当您拥有 pfx 时,您可以立即使用以下 keytool 命令对其进行转换:
keytool -importkeystore -srckeystore domain.pfx -srcstoretype pkcs12 -destkeystore name_of_the_keystore_file.jks -deststoretype jks
问题:keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配
请将别名从 tomcat 更改为任何其他别名,因为您对 Keystore -genkey 使用相同的别名
问题:
文件
secure.mysite.com.crt
包含单个证书还是一系列证书?
根据[1],当它是一条链时,该链应首先以用户(您的)证书排序,然后是零个或多个CA证书。
我认为您可以从密钥库中导出公钥,然后手动将其与您尝试导入的公钥进行比较。 OpenSSL 具有列出证书内容的命令。