知识库

在 Tomcat 安装 SSL 证书

安装过程会根据您从证书授权机构收到的证书格式稍有不同。您也可以从 ZTABOX 电子邮件中下载证书及证书信任链(CA bundle/中介证书)。

1) PEM

如果证书是以 PEM 格式接收的,您需要手动将 CA 根、CA 中介和为您域名签发的证书添加到您的密钥库中,顺序是从 CA 根开始,最终是您的域名签发的证书。

将 CA 根证书导入密钥库的命令:

keytool -import -trustcacerts -alias root -file RootCA.crt -keystore yourkeystore.jks

将 CA 中介证书导入密钥库的命令:

keytool -import -trustcacerts -alias intermediate -file Intermediate.crt -keystore yourkeystore.jks

重要! 如果您收到了多个中介证书,请使用不同的别名逐一导入。

最后,您需要导入为您的域名签发的证书。

keytool -import -trustcacerts -alias tomcat -file yourcertificate.crt -keystore yourkeystore.jks

您的域名证书的别名应与创建密钥库时使用的私钥的别名相同。如果您在创建密钥库时未指定别名,默认值将是 'mykey'。

2) PKCS#7

如果证书是以 PKCS7 格式接收的(通常具有 *.cer 或 *.p7b 扩展名),包括为您域名签发的证书和 CA 证书,则需要将其导入密钥库:

keytool -import -trustcacerts -alias tomcat -file yourcertificate.p7b -keystore yourkeystore.jks

如果证书导入成功,且密钥库已完成,您应该会看到以下讯息:

'Certificate reply was installed in keystore'

要检查添加到密钥库的证书,运行以下命令:

keytool -list -keystore yourkeystore.jks -v

您应该在输出中看到导入到密钥库中的证书的详细信息:

Email1_gen_csr_whm.jpg

截图中链由两个证书组成:根证书和由根证书签名的证书,这是为了测试目的而创建的。现在,链通常至少包含三个证书:根证书、中介证书和由中介签名的证书。

要以纯文本查看添加到密钥库的证书,运行以下命令:

keytool -list -rfc -keystore yourkeystore.jks

一旦密钥库完成,您需要在 Tomcat 配置中描述它。

通常,Tomcat 的配置文件名为 server.xml。

以纯文本打开它并创建以下记录:

< Connector port="443" protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https" secure="true" clientAuth="false"
sslProtocol="TLS" keystoreFile="/your_path/yourkeystore.jks"
keystorePass="password_for_your_key_store" / >

重启 Tomcat 以应用更改并使证书生效。

3. PKCS #12

在不同的 Java 基础服务器上生成的证书可以在服务器之间转移。这可以使用个人信息交换存储 (.pfx / .p12 证书文件) 进行,该文件包含完整证书链(终端证书和 CA bundle)和私钥。注意:.pfx 和 .p12 是称为 PKCS#12 的相同证书格式的不同扩展名。

有两种创建 PKCS #12 文件的方法:

  1. 使用 OpenSSL
  2. 使用 Keytool(将 JKS 转换为 .p12 并在 Java 服务器之间导入)

OpenSSL

可以使用以下命令创建包含私钥 (.key)、终端证书 (.crt) 和 CA bundle (.ca-bundle) 文件的 .pfx 文件:

openssl pkcs12 -export -out certificate.pfx -inkey privatekey.key -in domain.crt -certfile domain.ca-bundle

(privatekey.key、domain.crt 和 domain.ca-bundle 应替换为实际的文件名和文件路径。)

执行命令并输入 PKCS#12 存储密码后,该文件将在 OpenSSL 命令执行的默认目录中的 certificate.pfx 文件中访问(当前目录可用命令 pwd 进行检查)。

tomcat_pkcs12_01

一旦 .pfx 生成,您可以通过执行以下命令将其导入 Tomcat(或任何其他使用 Keytool 实例的 Java 基础 servlet 容器):

keytool -importkeystore -srckeystore certificate.pfx -srcstorepass < pfx password > -srcstoretype pkcs12
-destkeystore keystore.jks -deststoretype jks -deststorepass < keystore password >

(PFX 密码、密钥库密码和 .jks 文件名应替换为有效数据。)

tomcat_pkcs12_02

完成上述步骤后,PKCS #12 文件已成功导入到 JKS 文件中。

您也可以将 PKCS #12 文件作为密钥库本身。在这种情况下,该文件应在连接器中指定到所需的端口(默认值 443 和 8443),并且必须指定密钥库的类型(例如 keystoreType="PKCS12")。

Keytool(将完整的密钥库与终端证书和完整链转换为 PKCS #12)

在继续这些步骤之前,必须正确将终端证书导入密钥库。这基本上是前面描述过程的反向过程——这意味着源密钥库类型(srcstoretype)将是 jks,而目标类型将是 PKCS #12。

注意:运行 Tomcat(或使用 keytool 作为私有/公共密钥管理外壳的其他 servlet 容器)的一些 Java 版本对生成 PKCS #12 的文件扩展名有不同的偏好。较旧的版本(JDK 1.6 和更早版本)可以生成 .p12 文件。最新版本可以生成 .pfx 文件。在文件内容方面,.p12 和 .pfx 文件本质上是相同的。然而,.p12 可以在 Shell 或 Windows 文件资源管理器中轻松重命名为 .pfx。

命令如下:

keytool -importkeystore -srckeystore keystore.jks -srcstorepass < keystore password > -srcstoretype jks
-destkeystore keystore.p12 -deststoretype pkcs12 -deststorepass < pkcs#12 password >

(keystore.jks、密钥库和 PKCS #12 密码需用实际数据替换。)

在 shell 响应 'Import command completed' 后,PKCS #12 文件可以在 keystore.p12 文件中找到。

为了在 Tomcat 上无需将 .p12 文件解压到新的密钥库中而使其正常工作,您可以简单地在连接器中指定它到所需的端口,并添加 keystoreType="PKCS12" 指令。