Tomcat SSL 的 Keytool 命令包括自签名证书,但我的 CA 认证证书不能使用。我试着创建keystore,然后用root、intermediate和server cert导入它。改变Tomcatconfserver.xml中的连接器端口,启动了Tomcat服务器,但浏览器的URL没有反映出该URL是safecertificate链。
openssl pkcs12 -export -in mycert.crt -inkey mykey.key -out mycert.p12 -name tomcat -CAfile myCA.crt -caname root -chain
这是Apache文档中提供的命令,但如何在这个命令中导入中间证书?
元:这不是一个真正的编程或开发问题。另外,我很确定这是部分重复的,因为我记得以前写过这个答案的大部分内容,但现在找不到了;如果以后找到了,我会补充。
首先,要说明的是,改变Tomcat <Connector>中的端口并不能启用SSLTLS(HTTPS)。启用SSLTLS需要改变几个 其他 属性和(通常)在<Connector>中的元素,并且不需要改变端口,尽管你经常(可能通常)会一起改变这两者。
另外,你需要中间的证书,以获得一个合适的SSLTLS服务器,但是 你 不要 需要根证书. 所有SSLTLS标准都明确允许服务器从握手中传输的链中省略根证书,大多数非Java服务器都这样做,我见过的所有客户机都接受它。Java KeyStore功能的设计是为了支持多种应用,而不仅仅是SSLTLS,所以为了安全起见 keytool
鼓励你包含根目录,但对于其他工具,如OpenSSL,很容易省略它。如果你使用 想要 出于某种原因将其包含在内,这是被允许的,而且确实有效(说得迂腐一点,其实是(信任)锚而不是根。传统上认为锚是 做 根,但随着时间的推移,它已经发展到它 可能 不是。2018年的TLS1.3的RFC8446是第一个体现这一点的SSLTLS规范,即使在那里也是极为罕见的,所以我就不理会了)。
答案是 要在用OpenSSL命令行创建的PKCS12文件中包含链和或根证书,有两种方法。
手动确定正确的所需的证书,并在文件中提供它们 要么 的 -in
选项(默认为stdin,而stdin又可以从例如 cat
) 或 -certfile
(指定一个包含一个或多个证书PEM块的文件)
指定 -chain
并在工作中的信托商店中提供 起码 的正确证书。OpenSSL会自动选择从叶子证书中链出的证书,而忽略任何其他证书。
和几乎所有的命令行操作一样,工作中的truststore可以由以下内容组成 -CAfile
是一个包含任何数量的证书PEM块的文件(只有一个);或 -CApath
是一个包含任意数量的文件的目录,每个文件都包含一个证书PEM块,并有一个基于主题哈希的名称(或符号链接),如在man页面中描述的 c_rehash(1)
在您的系统上 ((1ssl)
或类似)或 在网上;或两者兼而有之。
如果 -CAfile -CApath
没有指定,也没有被 -no-CAfile -no-CApath
(仅在1.1.0以上),它们默认为编译时配置的文件和目录,但上游没有提供任何的 内容 为这样的文件或目录。我所熟悉的Linux发行版都是将OpenSSL的位置放在 /etc
的地方(但它们的位置各不相同),并有一个名为类似于 ca-certificates
为默认的truststore位置提供默认内容,以及 可 提供了一种改变这些内容的方法。例如在RedHat-family上,请看 update-ca-trust
而在Debian-family上,请看 update-ca-certificates
.
替代品。 对于Tomcat 9 (和8.5) 你不需要一个keystore. 旧版本的Tomcat要求你将SSLTLS实现与配置相匹配。Java (JSSE) 需要一个Java keystore,而'TCNative' (又名APR = Apache Portable Runtime) 需要OpenSSL风格的PEM文件。现代Tomcat允许你使用 要么 的配置类型与 任何 SSLTLS的实现,所以你可以简单地使用 mykey.key mycert.crt intermediate.crt
中的<Connector>或更好的现在首选的<SSLHostConfig>和<Certificate>子元素;见 http:/tomcat.apache.orgtomcat-9.0-docconfighttp.html#SSL_Support。 . 如果你是通过 http:/tomcat.apache.orgtomcat-9.0-docssl-howto.html。 要注意的是,还没有跟上时代的步伐,里面的一些细节都是错误的,虽然基本观点大多还是有效的。