【问题标题】:CA certified .cert file on Tomcat 9 (Linux server) , tomcat command not workingTomcat 9(Linux 服务器)上的 CA 认证 .cert 文件,tomcat 命令不起作用
【发布时间】:2020-09-02 20:41:13
【问题描述】:

Tomcat SSL 的 Keytool 命令包含自签名证书,该证书不适用于我的 CA 认证证书。我尝试创建密钥库并使用根证书、中间证书和服务器证书导入它。在更改 Tomcat/conf/server.xml 中的连接器端口时,启动了 Tomcat 服务器,但浏览器 URL 不反映该 URL 是安全/证书链。

openssl pkcs12 -export -in mycert.crt -inkey mykey.key -out mycert.p12 -name tomcat -CAfile myCA.crt -caname root -chain

这是Apache文档中提供的命令,但是如何在该命令中导入中间证书?

【问题讨论】:

  • 'Tomcat SSL 的 Keytool 命令包括自签名证书':Tomcat SSL/TLS 文档还包括如何处理 CA 签名证书。

标签: ssl java-8 keystore tomcat9


【解决方案1】:

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

首先,需要明确的是,更改 Tomcat 中的端口不会启用 SSL/TLS (HTTPS)。启用 SSL/TLS 需要更改 中的几个 其他 属性和(通常)元素,并且不需要更改端口,尽管您经常(可能通常)会同时更改两者。

此外,您需要适当的 SSL/TLS 服务器的中间证书,但不需要需要根证书。所有 SSL/TLS 标准都明确允许服务器从握手中传输的链中省略根证书,大多数非 Java 服务器都这样做,并且我见过的所有客户端都接受它。 Java KeyStore 功能旨在支持多个应用程序,而不仅仅是 SSL/TLS,因此为了安全起见keytool 鼓励您包含根目录,但使用 OpenSSL 等其他工具很容易忽略它。 OTOH,如果您出于某种原因想要包含它,这是允许的并且确实有效。 (学究起来,它实际上是(信任)锚而不是根。传统上,锚被认为是 根,但随着时间的推移,它可能不. 2018 年 TLS1.3 的 RFC8446 是第一个反映这一点的 SSL/TLS 规范,即使在那里也极为罕见,所以我将忽略它。)

答案:要在使用 OpenSSL 命令行创建的 PKCS12 文件中包含链和/或根证书,有两种方法:

  • 手动确定正确/所需的证书并在 或者-in 选项中提供它们(默认为标准输入,而后者又可以从例如 cat 管道传输) -certfile(指定包含一个或多个证书 PEM 块的文件)

  • 指定-chain 并在工作信任库中提供至少正确的证书。 OpenSSL 将自动从叶证书中选择链接的证书,忽略任何其他证书。

    与几乎所有命令行操作一样,工作信任库可以由-CAfile 组成,这是一个包含任意数量的证书 PEM 块的文件(只有一个);或-CApath,它是一个目录,其中包含任意数量的文件,每个文件包含一个证书 PEM 块并具有基于主题哈希的名称(或符号链接),如系统上c_rehash(1) 的手册页中所述((1ssl)或类似的)或on the web;或两者兼而有之。

    如果没有指定-CAfile -CApath,并且没有被-no-CAfile -no-CApath 抑制(仅在1.1.0 以上版本中),它们默认为在编译时配置的文件和目录,但上游不提供任何内容 用于此类文件和/或目录。 Linux 发行版我熟悉所有构建 OpenSSL 以在某处使用 /etc 中的位置(但它们的位置不同),并且有一个名为 ca-certificates 的包,它为默认信任库位置提供默认内容,并且 可能提供改变这些内容的方法。例如,在 RedHat-family 上参见 update-ca-trust,在 Debian-family 上参见 update-ca-certificates

替代方案:对于 Tomcat 9(和 8.5)您不需要密钥库。旧版本的 Tomcat 要求您将 SSL/TLS 实现与配置相匹配:Java (JSSE) 需要 Java 密钥库,而“tcnative”(又名 APR = Apache Portable Runtime)需要 OpenSSL 样式的 PEM 文件。现代 Tomcat 允许您将 either 类型的配置与 any SSL/TLS 实现一起使用,因此您可以简单地在 中使用 mykey.key mycert.crt intermediate.crt 或更好地使用现在首选的配置 子元素;见http://tomcat.apache.org/tomcat-9.0-doc/config/http.html#SSL_Support。如果您要通过http://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html 去,请注意尚未保持最新状态并且其中的一些细节是错误的,尽管基本想法大部分仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2015-12-10
    • 2014-10-18
    相关资源
    最近更新 更多