首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Tomcat HTTPS 雙向/單向認證完整配置指南:keystore、truststore、PKCS12 證書鏈實戰

     編輯:Java 綜合教學

Tomcat HTTPS 雙向/單向認證完整配置指南

生產環境強制 HTTPS 已成標配。本文詳解 Tomcat `` 配置、Java `keytool` 建立 JKS/PKCS12 證書庫、單向認證(僅伺服器證書)、雙向認證(客戶端憑證驗證)全流程,含瀏覽器匯入驗證步驟。

單向認證:僅伺服器證書,瀏覽器驗證伺服器身份

1. 建立伺服器金鑰庫

cd %JAVA_HOME%\bin
keytool -genkeypair -keypass 123456 -keyalg RSA \
  -keystore D:\tomcat.keystore -storepass 123456 \
  -dname "CN=localhost" -alias tomcat
  • 產生 `tomcat.keystore` (JKS 格式),含私鑰+自簽公鑰證書。
  • `CN=localhost` 需與訪問域名一致,否則瀏覽器警告。

2. server.xml 配置 Connector

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="D:/tomcat.keystore"
           keystorePass="123456"
           keystoreType="JKS" />
  • `clientAuth="false"`:不要求客戶端證書(單向)。
  • 支援 `keystoreType="PKCS12"` 使用 `.p12` 檔案。

雙向認證:伺服器驗證客戶端證書,雙向建立信任

1. 建立伺服器金鑰庫 (含信任錨點)

keytool -genkeypair -alias tomcat -keypass 123456 -keyalg RSA \
  -keystore D:\tomcat.jks -storepass 123456 -dname "CN=localhost"

2. 建立客戶端證書 (PKCS12 格式,瀏覽器可直接匯入)

keytool -genkeypair -alias mykey -keyalg RSA -storetype PKCS12 \
  -keystore D:\mykey.p12 -storepass 123456 -dname "CN=client1"

3. 導出客戶端公鑰證書,匯入伺服器信任庫

keytool -exportcert -alias mykey -keystore D:\mykey.p12 -storetype PKCS12 \
  -file D:\mykey.cer -storepass 123456

keytool -importcert -file D:\mykey.cer -keystore D:\tomcat.jks -storepass 123456
# 提示 "Trust this certificate? [no]: y"

4. 雙擊 `mykey.p12` 安裝到瀏覽器/系統憑證存儲

  • Windows:雙擊 → 「當前用戶」→ 自動選擇存儲 → 完成。
  • Chrome/Edge 使用系統存儲;Firefox 需在選項→隱私與安全→憑證→查看憑證→匯入。

5. server.xml 雙向認證 Connector 配置

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           keystoreFile="D:/tomcat.jks" keystorePass="123456"
           truststoreFile="D:/tomcat.jks" truststorePass="123456"
           keystoreType="JKS" truststoreType="JKS" />
  • `clientAuth="true"`:強制要求客戶端證書,驗證失敗拒絕連線。
  • `truststoreFile`:包含受信任 CA/客戶端證書的信任庫(此處複用 `tomcat.jks`)。
  • 生產建議分離:`server.jks` (私鑰) + `truststore.jks` (CA/客戶端公鑰)。

驗證與排查

  1. 瀏覽器訪問 `https://localhost:8443` → 單向:顯示鎖圖標;雙向:彈出選擇客戶端證書對話框。
  2. curl 測試雙向:`curl --cert mykey.p12:123456 --cacert mykey.cer https://localhost:8443`
  3. 常見錯誤:
    • `SSL handshake failure`:檢查 `keystorePass`、`alias`、證書過期、CN 匹配。
    • `Certificate verify failed`:信任庫缺少客戶端 CA 或證書鏈不全。
    • 瀏覽器「不安全」:自簽證書需手動信任或購買公信 CA 證書 (Let's Encrypt 免費)。

生產級最佳實踐

  1. 使用 Let's Encrypt 免費受信憑證 + `certbot` 自動續期,避免自簽警告。
  2. 證書檔案權限 `600`,僅 Tomcat 進程用戶可讀。
  3. 啟用 HSTS:`response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains")`。
  4. 最低 TLS 1.2:`sslEnabledProtocols="TLSv1.2,TLSv1.3"`。
  5. 憑證到期監控:Prometheus + `ssl_certificate_expiration` 指標告警。

從開發自簽到生產公信 CA,掌握 Tomcat HTTPS 全鏈路配置,守護傳輸層安全底線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved