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的Keychain完成)。在服务器(Tomcat 6)上,我使用keytool
导入.p12
(从Apple的钥匙串导出)并将其合并到一个新的.jks
密钥库中后来在Tomcat中配置。一切都运转正常。
但是,我遇到的所有指南和文档even the one from Tomcat itself都说明了从keytool
生成 CSR ,然后将CA的响应证书导回到.jks
。我想通过证书签名请求方法做到这一点有很多原因,但我现在一直在努力让这个工作几天。
我的步骤是:
如第一个链接所述,将自己的CA导出为myCA.cer
。
来自Tomcat的服务器机器:
keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks
密码: keystorepass
租借传递: keystorepass
名字和姓氏: secure.mysite.com
其他信息:东西
输入<tomcat>
的密钥: keystorepass
keytool -certreq -alias tomcat -keyalg -RSA -keystore keystore.jks -file secure.mysite.com.csr
接下来我打开Apple Keychain Access
&gt; Certificate Assistant
&gt; 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
格式从Keychain导出.cer
从零开始多次开始这个过程。
我在这里缺少什么?
答案 0 :(得分:0)
您需要先按root的顺序安装证书,然后是中间证书,最后是您自己的个人服务器密钥。 您可以通过查看已颁发的证书并查看信息来检查链的顺序。
答案 1 :(得分:0)
根据您执行的步骤,您首先创建了一个密钥库(在其中生成了私钥),然后您尝试在密钥库中导入证书。但是在命令中你没有使用你使用openssl
转换的私钥;您使用了在生成密钥库时刚刚生成的私钥。
当你拥有pfx时,你可以使用下面的keytool命令直接转换它:
keytool -importkeystore -srckeystore domain.pfx -srcstoretype pkcs12 -destkeystore name_of_the_keystore_file.jks -deststoretype jks
答案 2 :(得分:-1)
我建议使用XCA来颁发证书。它为CA,HTTPS服务器端HTTPS客户端预定义了模板,因此很容易做到你想要的。
至于密钥库,我建议使用portecle。再次,漂亮的GUI,非常容易使用。从XCA数据库导出证书并使用portecle导入它们。然后保存为jks。
答案 3 :(得分:-1)
我会说最后一个命令应该是&#34; keytool -importcert&#34;而不是你的&#34; keytool -import&#34;。
引用Java 8的文档(因为你没有提到你的Java版本)[1]
导入证书有两个原因:将其添加到可信证书列表中,并导入从证书颁发机构(CA)收到的证书回复,作为向该CA提交证书签名请求的结果
[1] http://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html#keytool_option_importcert
<强>更新强>
我的坏 - 命令名称无关紧要。后来在同一份文件中说,&#39; -import&#39;和&#39; -importcert&#39;是同义词。
此命令在早期版本中命名为-import。此版本仍支持此旧名称。新名称-importcert是未来的首选。
<强>问题:强>
文件secure.mysite.com.crt
是否包含单个证书或证书链?
根据[1],当它是一个链条时,链条应与用户(您的)证书一起订购,然后是零个或多个CA证书。
我认为您可以从密钥库中导出公钥,并手动将其与您尝试导入的公钥进行比较。 OpenSSL具有列出证书内容的命令。
答案 4 :(得分:-1)
问题:keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt keytool错误:java.lang.Exception:回复和密钥库中的公钥不匹配
请将别名从tomcat更改为任何其他别名,因为您使用的是Keystore -genkey的相同别名