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

Apache + Tomcat + SSL 整合配置實戰詳解

     編輯:Java 程式設計入門

環境基線

組件版本安裝路徑監聽端口
Windows Server2003 SP4——
JDK1.5.0——
Apache HTTPD2.0.54D:/Apache280
Tomcat5.5.14D:/Tomcat518080 (AJP 8009)
連接器mod_jk2.so (JK2)D:/Apache2/modules—

第一階段:Apache 與 Tomcat 整合 (JK2)

1. 載入模組

編輯 D:/Apache2/conf/httpd.conf,在 LoadModule 區段添加:

LoadModule jk2_module modules/mod_jk2.so

2. 中文編碼支援

# 修改預設編碼
AddDefaultCharset GB2312

3. 虛擬主機配置

<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot "D:/Tomcat51/webapps/jsp-examples"
    ServerName localhost
    ErrorLog logs/error_log
    CustomLog logs/access_log common
</VirtualHost>

4. JK2 工作器配置 (workers2.properties)

放置於 D:/Apache2/conf/:

[logger.apache2]
file="D:/Apache2/logs/error.log"
level=ERROR

[config]
file=D:/Apache2/conf/workers2.properties
debug=1

[shm]
file=D:/Apache2/conf/jk2.shm
size=1000000

[channel.socket:localhost:8009]
port=8009
host=localhost

[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

# URI 映射規則
[uri:/jsp-examples/*]
[uri:/*.jsp]

5. 驗證整合

在 D:/Tomcat51/webapps/jsp-examples/sessiontest.jsp 放置測試頁,重啟 Apache + Tomcat,訪問 https://localhost/jsp-examples/sessiontest.jsp 應正常響應。

第二階段:Tomcat 啟用 SSL (雙向認證)

1. 憑證準備

  • 服務端金鑰庫:server02.jks → 放入 D:/Tomcat51/conf/
  • 客戶端憑證:dwp.p12 → 雙擊安裝至瀏覽器/系統憑證存儲

2. 配置 SSL Connector (server.xml)

<Connector 
    port="8443" 
    maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" disableUploadTimeout="true"
    acceptCount="100" 
    scheme="https" secure="true"
    clientAuth="true" 
    sslProtocol="TLS"
    keystoreFile="conf/server02.jks" keystorePass="123456"
    truststoreFile="conf/server02.jks" truststorePass="123456"
/>

關鍵屬性:

  • clientAuth="true":啟用雙向認證,強制客戶端出示憑證
  • keystoreFile:服務端私鑰與證書鏈
  • truststoreFile:信任的 CA 證書庫(此處複用同一文件,生產環境應分離)

3. Web 應用強制 HTTPS (web.xml)

編輯 D:/Tomcat51/webapps/jsp-examples/WEB-INF/web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/*</url-pattern>  <!-- 全站強制 HTTPS -->
    </web-resource-collection>
    
    <!-- 註釋掉角色限制,僅強制傳輸加密 -->
    <!--
    <auth-constraint>
        <role-name>tomcat</role-name>
        <role-name>role1</role-name>
    </auth-constraint>
    -->
    
    <user-data-constraint>
        <description>全站強制機密傳輸</description>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

4. 完整驗證流程

  1. 重啟 Apache + Tomcat
  2. 訪問 https://localhost/jsp-examples/sessiontest.jsp
  3. 瀏覽器彈出客戶端憑證選擇對話框
  4. 選擇 dwp.p12 對應憑證
  5. SSL 握手成功,URL 自動跳轉為 https://localhost:8443/jsp-examples/sessiontest.jsp
  6. 頁面正常顯示,通道加密生效

常見問題排查

現象可能原因解決方案
瀏覽器提示「連接不安全」自簽證書不被信任將 CA 證書導入瀏覽器「受信任的根憑證機構」
403 Forbidden / Client Certificate Required未安裝/選擇客戶端憑證確認 dwp.p12 已正確安裝至用戶/機器存儲
JK2 無法連接 TomcatAJP 端口衝突/防火牆檢查 server.xml <Connector port="8009" protocol="AJP/1.3"/> 已啟用
中文亂碼URI 編碼不一致Tomcat URIEncoding="UTF-8" + Apache AddDefaultCharset UTF-8

生產環境強化建議

  • **分離金鑰庫**:keystore 存服務端私鑰,truststore 存 CA 公鑰,權限 600
  • **憑證有效期管理**:建立到期提醒機制,自動化續簽流程
  • **強化加密套件**:ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" 禁用弱套件
  • **HSTS 頭部**:Apache 添加 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  • **OCSP Stapling**:啟用 SSLUseStapling on 減少客戶端驗證延遲

總結

Apache 靜態資源/反向代理 + Tomcat 動態應用 + SSL 雙向認證,構建經典的「DMZ 前端 + 內網應用」安全架構。JK2 雖已被 mod_jk/mod_proxy_ajp 取代,但配置邏輯互通。核心要點:連接器正確映射 URI、SSL Connector 雙向認證參數精確、web.xml 強制傳輸機密性、憑證鏈完整可信。遷移至現代版本 (Apache 2.4 + Tomcat 9/10 + mod_proxy_ajp) 時,配置結構同理可循。

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