Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheTomcat:将现有证书导入密钥库_Java_Tomcat_Ssl - Fatal编程技术网

Java ApacheTomcat:将现有证书导入密钥库

Java ApacheTomcat:将现有证书导入密钥库,java,tomcat,ssl,Java,Tomcat,Ssl,我正在尝试为我们的服务器配置SSL。现在,我已确保crt文件密码与密钥库(.jks密码)相同。但是,每当我以别名tomcat或root(因为只有一个crt文件,所以只能使用其中一个)的形式导入crt文件时,我都会得到ssl\u error\u no\u cypher\u overlap 我找不到任何关于导入一个证书的指南,这些指南不会抱怨它是自签名证书,并且一个证书没有ssl\u错误\u没有密码\u重叠错误 这些是我的档案 domainname.ca bundle,.crt,.csr,.key,

我正在尝试为我们的服务器配置SSL。现在,我已确保crt文件密码与密钥库(.jks密码)相同。但是,每当我以别名tomcat或root(因为只有一个crt文件,所以只能使用其中一个)的形式导入crt文件时,我都会得到
ssl\u error\u no\u cypher\u overlap

我找不到任何关于导入一个证书的指南,这些指南不会抱怨它是自签名证书,并且一个证书没有
ssl\u错误\u没有密码\u重叠
错误

这些是我的档案
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" />


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

梅塔:这感觉像是复制品,但我很难找到匹配的,所以

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

 keytool -list -v -keystore $d.jks
并查找私钥条目(不是trustedCert条目)。如果存在,请查看证书以确定它们是否是您想要的证书。如果它们不是所需的证书,但您的.crt和捆绑文件中确实有所需的证书,请描述.crt和捆绑文件的内容,特别是捆绑文件,我们可以解决如何使用它们来修复.jks。特别是,有两种格式通常用于单个证书,有几种格式用于CA“捆绑”;如果您在记事本或vi等编辑器中打开文件,第一行是
----开始一些内容---
,然后是几乎所有字母和数字的块,然后
----结束相同----
,可能更多相同的内容,发布somethings;如果它们看起来都是随机字符,并且您有一个十六进制转储工具,至少发布前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
,并添加
keystoreType=“pkcs12”
。或者,您可以使用以下命令将pkcs12转换为JKS

keytool -importkeystore -srckeystore $d.p12 -srcstoretype pkcs12 -destkeystore $d.jks 
如果.p12包含私钥但证书错误,则有两种方法:

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

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


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

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

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

试试这个答案@rpc1:没用。同样的错误。我已经用我的连接器更新了主帖子。请看一看。@rkosegi:正如我在主要帖子中所说的,我已经尝试了许多现有的解决方案,包括您发布的链接。没有帮助…:-)嗨,我的朋友,我已经给出了第一个命令,输出在粘贴箱中:。我没有从第三个命令开始,因为我认为输出可能会对这个问题有所帮助。请告诉我该如何进行。非常感谢。:-)@WeareBorg您的JKS显示两个trustedCert,并且没有私钥,因此它是无用的。我假定第二个显示是您的.p12;未能解析DER表示它已损坏或未损坏。p12。如果您在Unix上(或者可以将文件作为二进制文件移动到Unix),请执行
od-tx1a-N64$d.p12
并显示该操作。否则,如果您可以得到前64个字节左右的任何合理类型的hexdump,那么就这样做。如果任何x的hexdump的第一个字节是
30 82 x 02 01 03 30 82 x 06 09
,并且您有openssl或任何其他ASN.1 DER解析程序可用,请执行
openssl asn1parse-通知DER-在$d.p12
。。。。。。对于另一个程序,删除/编辑八位字符串值的大hextump blob,但保留偏移量、深度、标记/类型和对象标识符的结构,尤其是任何错误消息,并显示。如果我们需要的话,您也可以对
.key
文件执行相同的操作(hextump first 64,并尝试asn1parse)。对不起,我无法理解您的回答思路,您能解释一下吗。谢谢。:-)我尝试使用您的配置运行tomcat。工作正常。什么时候出现错误ssl\u error\u no\u cypher\u重叠?当我尝试加载包含https的页面时。你尝试过我的连接器配置吗?
 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