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

Tomcat 配置 HTTPS 實戰指南:從自簽證書到生產級部署

     編輯:Java 程式設計入門

前言:SSL/TLS 是信任的基石

SSL(Secure Socket Layer)及其繼任者 TLS,通過加密傳輸與身份認證雙重機制,保障瀏覽器與伺服器通訊安全。本文詳細記錄 Tomcat 配置 HTTPS 的完整流程,從開發測試用的自簽證書到生產環境 CA 證書部署。

核心概念速覽

  • 加密傳輸:雙向加密,防竊聽、防篡改
  • 伺服器認證:伺服器出示證書,瀏覽器驗證域名匹配、CA 信任鏈、有效期
  • 客戶端認證(可選):雙向 TLS,常用於 B2B、高安全場景
  • 證書類型:
    • CA 簽發:VeriSign、DigiCert、Let's Encrypt 等,瀏覽器內置信任,適合生產
    • 自簽證書:keytool 生成,無 CA 背書,瀏覽器報警,適合開發/測試/內網

步驟一:生成密鑰庫與證書

1. 使用 keytool 生成自簽證書

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
  -keystore D:\certs\localhost.keystore -storepass changeit \
  -keypass changeit -validity 365 \
  -dname "CN=localhost, OU=Dev, O=MyOrg, L=City, ST=State, C=CN"

參數詳解

參數說明建議值
-keyalg RSA非對稱加密算法RSA(兼容性最佳)
-alias密鑰庫條目別名tomcat
-keystore密鑰庫文件路徑專用目錄,非用戶主目錄
-storepass密鑰庫訪問密碼生產環境必須修改強密碼
-keypass私鑰密碼必須與 storepass 相同(Tomcat 限制)
-validity有效天數365(測試)或更長
-dname證書主體信息(X.500)CN=訪問域名(關鍵!)

2. 生產環境:申請 CA 證書流程

  1. 生成 CSR(證書簽名請求):keytool -certreq -alias tomcat -file certreq.csr -keystore ...
  2. 提交 CSR 給 CA(Let's Encrypt 免費、自動化;或商業 CA)
  3. 收到證書鏈(根證書、中間證書、域名證書)
  4. 導入密鑰庫:keytool -import -alias root -trustcacerts -file root.crt -keystore ...(依次導入根、中間、域名)

步驟二:配置 server.xml 啟用 HTTPS Connector

定位配置文件

$CATALINA_HOME/conf/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:/certs/localhost.keystore"
    keystorePass="changeit"
    keystoreType="JKS"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
             TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384"
/>

關鍵屬性說明

  • protocol:建議使用 NIO2 非阻塞協議(高併發性能更好)
  • keystoreFile/keystorePass:必須顯式指定,否則 Tomcat 尋找用戶主目錄 .keystore
  • ciphers:強烈建議顯式配置,禁用弱加密套件(RC4、DES、3DES、CBC 模式),優先 ECDHE 前向保密
  • sslProtocol="TLS":支援 TLS 1.0/1.1/1.2/1.3(視 JDK 版本),不建議指定 SSLv3

步驟三:驗證與常見問題

驗證訪問

重啟 Tomcat,瀏覽器訪問:https://localhost:8443

  • 自簽證書:瀏覽器顯示「不安全」警告,點擊「繼續」即可看到頁面
  • CA 證書:綠色小鎖,證書詳情顯示機構、有效期、域名匹配

常見坑點排查

現象原因解決
啟動報 IOException: Keystore was tampered密碼錯誤核對 keystorePass、keypass 是否一致
瀏覽器提示「證書域名不匹配」CN ≠ 訪問域名重新生成證書,-dname "CN=實際訪問域名"
HTTPS 頁面資源(CSS/JS)被瀏覽器攔截混合內容:HTTPS 頁面引用 HTTP 資源所有資源改相對路徑或 HTTPS 絕對路徑
客戶端認證失敗clientAuth="true" 但無信任庫配置 truststoreFile/truststorePass 指向 CA 證書庫

生產級加固建議

  1. 強制 HTTPS:配置 web.xml `` `CONFIDENTIAL` 自動跳轉 HTTP→HTTPS
  2. HSTS:響應頭添加 Strict-Transport-Security: max-age=31536000; includeSubDomains
  3. 證書自動化:Let's Encrypt + Certbot / acme.sh 定時續期,避免過期事故
  4. 定期掃描:使用 SSL Labs (ssllabs.com/ssltest) 檢測配置等級,目標 A+

結語:HTTPS 不是選配,是標配

從 2017 年 Chrome 標記 HTTP 為「不安全」起,HTTPS 已成 Web 基礎設施。Tomcat 配置並不複雜,關鍵在於:理解證書鏈信任模型、正確配置加密套件、建立自動化續期機制。讓每一個部署的 Tomcat 都擁有綠色小鎖,是開發者的基本職業素養。

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