java - Apache tomcat : Importing already existing certificates into keystore

标签 java tomcat ssl

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

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

这些是我的文件 域名.ca-bundle, .crt, .csr, .key, .p12, 域名.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----- 后跟几乎所有字母和数字的 block ,然后是 ----END same---- 也许更多的是相同的,张贴一些东西;如果它们看起来都是随机字符,并且您有一个可用的十六进制转储工具,至少可以发布前 64 个字节,或者如果您有 OpenSSL 或任何其他可用的 ASN.1(二进制)解析器,请发布结果。如果根本没有私钥,这个.jks就没用了;丢弃它并继续。

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

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

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

如果这是您想要的,Tomcat(和 Java/JSSE)实际上可以直接使用 pkcs12 作为 keystore 来代替 JKS:只需设置 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 并使用它。

关于java - Apache tomcat : Importing already existing certificates into keystore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32866528/

相关文章:

java - 谁能推荐一个Java富文本编辑器?

java - Spring MVC HTTP 状态 500 – 内部服务器错误,servlet [dispatcher] 的 Servlet.init() 抛出异常

tomcat - 如何在安装新的 tomcat 服务时添加 Java 选项

php - 无法在公司防火墙后面使用 Composer 进行更新/安装

ssl - 读取文件 cert=REMOTE_SMTP_/etc/exim4/exim.crt 时出现 Exim TLS 错误

qt - 由于 ssl 问题,无法在 Ubuntu 上安装 QT4

java - 是否必须将引用设置为 null 才能使垃圾收集工作

java - 添加自定义方法作为组件的关键监听器

java - 即使对象指向 null,也不会出现 Nullpointer 异常

java - android tomcat读取servlet字符串文本