【问题标题】:Apache tomcat: Importing already existing certificates into keystoreApache tomcat:将现有证书导入密钥库
【发布时间】:2015-09-30 12:47:41
【问题描述】:

我正在尝试为我们的服务器配置 SSL。现在,我已确保 crt 文件密码与密钥库(.jks 密码)相同。但是,每当我将 crt 文件作为别名 tomcat 或 root 导入时(我只能使用其中一个,因为只有一个 crt 文件),我得到ssl_error_no_cypher_overlap

我找不到任何导入一个证书的指南,它不会抱怨它是一个自签名证书并且一个证书没有 ssl_error_no_cypher_overlap 错误。

这些是我拥有的文件 domainname.ca-bundle, .crt, .csr, .key, .p12, domainname.jks,

这是我给的命令:

keytool -import -trustcacerts -alias root -file domainname.crt -keyalg RSA -keystore domainaname.jks

连接器:

 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
              compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1" sslProtocol="TLS" URIEncoding="utf-8"
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/x-javascript,application/javascript"
               keystoreFile="domain.jks" keystorePass="pass" />

任何帮助都会很好。非常感谢。

【问题讨论】:

标签: java tomcat ssl


【解决方案1】:

Meta:这感觉像是重复的,但我无法轻易找到匹配项,所以...

SSL/TLS 服务器必须有一个带有 MATCHING PRIVATE KEY 的证书 链证书(如果适用)。一个证书本身,甚至多个证书是不够的。先做

 keytool -list -v -keystore $d.jks

并查找 PrivateKey 条目(不是trustedCert 条目)。如果存在,请查看证书以确定它们是否是您想要的证书。如果它们不是所需的证书,但您的 .crt 和捆绑文件中确实有所需的证书,请描述 .crt 的内容,尤其是捆绑文件的内容,我们可以弄清楚如何使用他们修复.jks。特别是,单个证书通常使用两种格式,CA“捆绑”有几种格式;如果您在记事本或 vi 等编辑器中打开文件,并且第一行是 -----BEGIN something-----,然后是几乎所有字母和数字的块,然后是 ----END same----,也许更多相同,请发布一些东西;如果它们看起来都是随机字符,并且至少在前 64 个字节后您有可用的十六进制转储工具,或者如果您有 OpenSSL 或任何其他 ASN.1(二进制)解析器可用,则发布结果。如果根本没有私钥,这个.jks 是没用的;丢弃它并继续。

您的.key 文件听起来可能包含私钥,但人们标记.key 的格式有几十种,而且该文件不太可能是可用格式。如果 p12 中的 key 不是更方便,我们可以回到这个。

您的.p12 文件几乎肯定包含私钥和一些证书,但不一定包含所需的证书。 (从技术上讲,PKCS#12 标准允许文件没有私钥,但创建 PKCS#12 的所有常用工具都不会这样做。)要查看您现在拥有的内容,请执行

keytool -list -v -keystore $d.jks -storetype pkcs12

如果这是您想要的,Tomcat(和 Java/JSSE)实际上可以直接使用 pkcs12 作为密钥库来代替 JKS:只需为其设置 keystoreFilekeystorePass 并添加 keystoreType="pkcs12"。或者,您可以使用

将 pkcs12 转换为 JKS
keytool -importkeystore -srckeystore $d.p12 -srcstoretype pkcs12 -destkeystore $d.jks 

如果 .p12 包含私钥但证书错误,则有两种方法:

  • 首先将 pkcs12 转换为 JKS,然后修复 JKS 中的证书;现在这与我的第一段相同:JKS contains privatekey but wrong cert(s)

  • 1234563这让您回到我的第四段:具有正确证书的 pkcs12,您可以使用或转换为 JKS 并使用它。

【讨论】:

  • 嗨,我的朋友,我已经给出了第一个命令,输出在 pastebin 中:pastebin.com/8AJNhxtr。我没有从第三个命令开始,因为我认为输出可能会阐明这个问题。请让我知道我应该如何进行。非常感谢。 :-)
  • @WeareBorg 你的 JKS 显示了两个trustedCert,没有 PrivateKey,所以没用。我假设第二个显示器是你的 .p12;未能解析 DER 表明它已损坏或根本不是 .p12。如果您使用的是 Unix(或者可以将文件 作为二进制文件 移动到 Unix),请执行 od -tx1a -N64 $d.p12 并显示。否则,如果您可以获得前 64 个字节左右的任何合理类型的 hexdump,请执行此操作。如果任何 x 的 hexdump 的第一个字节是 30 82 x x 02 01 03 30 82 x x 06 09 并且您有可用的 openssl 或任何其他 ASN.1 DER 解析程序,请执行 openssl asn1parse -inform der -in $d.p12 ...
  • ... 或其他程序的等效项,删除/编辑 OCTET STRINGS 值的大型 hexdump blob,但保留偏移量、深度、标签/类型和对象标识符方面的结构,尤其是任何错误消息,并显示出来。当您使用它时,您也可以对.key 文件执行相同的操作(hexdump 前 64 位,然后尝试 asn1parse),以备我们需要时使用。
【解决方案2】:

我尝试了您的连接器属性(使用 protocol 进行了一些更改)

 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="200" compression="force"
              compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1" sslProtocol="TLS" URIEncoding="utf-8"
              compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/x-javascript,application/javascript"
               keystoreFile="domainaname.jks" keystorePass="123456"    keystoreType="JKS"
               truststoreFile="domainaname.jks"
                truststoreType="JKS" truststorePass="123456"
               />

一切正常 变化:

 protocol="org.apache.coyote.http11.Http11NioProtocol"
 truststoreFile="domainaname.jks"
 truststoreType="JKS" truststorePass="123456"

您是否在密钥库中导入了私钥?

keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert

【讨论】:

  • 对不起,你的回答我没能理解你的思路,你能解释一下吗?谢谢。 :-)
  • 我尝试使用您的配置运行 tomcat。而且效果很好。
  • 您何时收到错误 ssl_error_no_cypher_overlap?
  • 当我尝试加载有 https 的页面时。
  • 你试过我的连接器配置了吗?
猜你喜欢
  • 1970-01-01
  • 2013-11-24
  • 2014-03-01
  • 2013-01-02
  • 2011-01-04
  • 2016-10-26
  • 2014-02-12
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多