CA认证的.cert文件在Tomcat 9(Linux服务器)上,tomcat命令不工作。

问题描述 投票:-1回答:1

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文档中提供的命令,但如何在这个命令中导入中间证书?

ssl java-8 keystore tomcat9
1个回答
1
投票

元:这不是一个真正的编程或开发问题。另外,我很确定这是部分重复的,因为我记得以前写过这个答案的大部分内容,但现在找不到了;如果以后找到了,我会补充。

首先,要说明的是,改变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。 要注意的是,还没有跟上时代的步伐,里面的一些细节都是错误的,虽然基本观点大多还是有效的。

© www.soinside.com 2019 - 2024. All rights reserved.