知識庫

在 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" 指令。