繁体   English   中英

Apache tomcat:将已经存在的证书导入密钥库

[英]Apache tomcat: Importing already existing certificates into keystore

我正在尝试为我们的服务器配置SSL。 现在,我已确保crt文件的密码与keystore(.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" />

你能帮忙的话,我会很高兴。 非常感谢。

Meta:感觉像是重复的游戏,但我很难找到匹配的游戏,所以...

SSL / TLS服务器必须具有带有匹配私钥的证书 链证书(如果适用)。 仅凭一个证书,甚至几个证书是不够的。 先做

 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的keystoreFile keystorePass :只需为其设置keystoreFilekeystorePass并添加keystoreType="pkcs12" 或者,您可以使用以下命令将pkcs12转换为JKS

keytool -importkeystore -srckeystore $d.p12 -srcstoretype pkcs12 -destkeystore $d.jks 

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

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

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

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

 <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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM