Apache tomcat:将现有证书导入密钥库

时间:2015-09-30 12:47:41

标签: java tomcat ssl

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

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

这些是我的文件 domainname.ca-bundle.crt.csr.key.p12domainname.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" />

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

2 个答案:

答案 0 :(得分:0)

Meta:这感觉就像是重复但我不能轻易找到匹配......

SSL / TLS服务器必须具有证书WITH 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中关键不方便,我们可以回过头来看。

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

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

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

将pkcs12转换为JKS
keystoreType="pkcs12"

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

  • 首先将pkcs12转换为JKS,然后将证书修复为JKS;现在这与我的第一段相同:JKS包含私钥但错误的证书

  • 如果您拥有或获得OpenSSL,请使用它将pkcs12“解压缩”为单独的私钥和证书文件,将错误的证书文件替换为正确的证书文件,然后重新构建新的pkcs12。这将使您回到我的第四段:pkcs12与正确的证书,您可以使用或转换为JKS并使用它。

答案 1 :(得分:0)

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

 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

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

{
    "GetIPAResult": "{\"Data\":[{\"Name\":\"Pan1\",\"Email\":\"abc@example.com\"},{\"Name\":\"Pan2\",\"Email\":\"xyz@example.com\"}]}"
} 
相关问题