[英]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
, .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" />
你能帮忙的话,我会很高兴。 非常感谢。
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
:只需为其设置keystoreFile
和keystorePass
并添加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.