SSLTLS 配置

HTTPS

HTTPS(也稱為 HTTP over TLS,[1] [2] HTTP over SSL,[3]和 HTTP Secure [4] [5])是用於在因特網上廣泛使用的計算機網路進行安全通訊的協議。HTTPS 由傳輸層安全性或其前身安全套接字層加密的連線中的超文字傳輸​​協議(HTTP)通訊組成。HTTPS 的主要動機是對訪問過的網站進行身份驗證,並保護所交換資料的隱私性和完整性。

SSL

什麼是 ssl SSL(安全套接字層)的影象結果是用於在 Web 伺服器和瀏覽器之間建立加密連結的標準安全技術。此連結可確保在 Web 伺服器和瀏覽器之間傳遞的所有資料保持私有和完整。SSL 是一種安全協議。協議描述瞭如何使用演算法。

TLS

傳輸層安全性(TLS)及其前身安全套接字層(SSL)(通常稱為 SSL)是旨在通過計算機網路提供通訊安全性的加密協議。

SSL 證書

所有瀏覽器都能夠使用 SSL 協議與安全的 Web 伺服器進行互動。但是,瀏覽器和伺服器需要所謂的 SSL 證書才能建立安全連線。

SSL 證書具有金鑰對:公鑰和私鑰。這些金鑰一起工作以建立加密連線。證書還包含所謂的主題,即證書/網站所有者的身份。

SSL 證書如何建立安全連線

  1. 當瀏覽器嘗試訪問受 SSL 保護的網站時,瀏覽器和 Web 伺服器使用稱為“SSL 握手”的程序建立 SSL 連線

  2. 實質上,三個金鑰用於設定 SSL 連線:公鑰,私鑰和會話金鑰。

建立安全連線的步驟

  1. 瀏覽器連線到使用 SSL(https) 保護的 Web 伺服器(網站)。瀏覽器請求伺服器標識自己。

  2. 伺服器傳送其 SSL 證書的副本,包括伺服器的公鑰。

  3. 瀏覽器根據受信任的 CA 列表檢查證書根目錄,並且證書未過期,未撤消,並且其公用名對其所連線的網站有效。如果瀏覽器信任該證書,它將使用伺服器的公鑰建立,加密和發回對稱會話金鑰。

  4. 伺服器使用其私鑰解密對稱會話金鑰,併發回用會話金鑰加密的確認以啟動加密會話。

  5. 伺服器和瀏覽器現在使用會話金鑰加密所有傳輸的資料。

SSL / TLS 和 Tomcat

請務必注意,配置 Tomcat 以利用安全套接字通常僅在將其作為獨立 Web 伺服器執行時才需要。

如果將 Tomcat 主要作為 Servlet / JSP 容器執行在另一個 Web 伺服器(例如 Apache 或 Microsoft IIS)後面,通常需要配置主 Web 伺服器以處理來自使用者的 SSL 連線。

證書

為了實現 SSL,Web 伺服器必須為接受安全連線的每個外部介面(IP 地址)具有關聯的證書。證書作為數字驅動程式許可證

  1. 這個駕駛執照由其所有者以加密方式簽署,因此其他任何人都難以偽造

  2. 證書通常從著名的證書頒發機構(CA)購買,例如 VeriSign 或 Thawte

然而,在許多情況下,身份驗證並不是真正的問題。管理員可能只想確保伺服器傳送和接收的資料是私有的,並且不能被可能正在竊聽連線的任何人窺探。幸運的是,Java 提供了一個相對簡單的命令列工具,名為 keytool,可以輕鬆建立自簽名證書。自簽名證書只是使用者生成的證書,尚未在任何知名 CA 中正式註冊,因此根本不保證是真實的

準備證書金鑰庫

Tomcat 目前僅在 JKS,PKCS11 或 PKCS12 格式金鑰庫上執行。

JKS:

JKS 格式是 Java 的標準 Java KeyStore 格式,是 keytool 命令列實用程式建立的格式。此工具包含在 JDK 中

PKCS11 / PKCS12

PKCS12 格式是一種網際網路標準,可以通過 OpenSSL 和 Microsoft 的金鑰管理器(以及其他東西)進行操作。

要從頭開始建立包含單個自簽名證書的新 JKS 金鑰庫,請從終端命令列執行以下操作:

$ keytool -genkey -alias tomcat -keyalg RSA

此命令將在你執行它的使用者的主目錄中建立一個名為“.keystore”的新檔案。

要指定其他位置或檔名,請新增 -keystore 引數,然後新增金鑰庫檔案的完整路徑名。

$ Keytool -genkey -alias tomcat -keyalg RSA  -keystore \path\to\my\dir\<keystore-file-name>

執行此命令後,將首先提示你

  1. 金鑰庫密碼
  2. 有關此證書的一般資訊,例如公司,聯絡人姓名等。

最後,系統將提示你輸入金鑰密碼,該密碼是專門用於此證書的密碼(與儲存在同一金鑰庫檔案中的任何其他證書相對)。

如果一切都成功,你現在擁有一個金鑰庫檔案,其中包含可供伺服器使用的證書。

編輯 Tomcat 配置檔案

Tomcat 可以使用兩種不同的 SSL 實現:

  1. JSSE 實現作為 Java 執行時的一部分提供(自 1.4 起)

    Java 安全套接字擴充套件(JSSE)支援安全的 Internet 通訊。它為 Java 版本的 SSL 和 TLS 協議提供了框架和實現,幷包括資料加密,伺服器身份驗證,訊息完整性和可選客戶端身份驗證的功能

    JSSE API 旨在允許無縫插入其他 SSL / TLS 協議和公鑰基礎結構(PKI)實現。開發人員還可以提供備用邏輯,以確定是否應該信任遠端主機,或者應該將哪些身份驗證金鑰材料傳送到遠端主機。

  2. APR 實現,預設使用 OpenSSL 引擎。

Connector 的確切配置詳細資訊取決於正在使用的實現。

<!-- Default in configuration file ..-->

<Connector protocol="HTTP/1.1"  port="8080" .../>

要定義 Java(JSSE) 聯結器,無論是否載入 APR 庫,請使用以下方法之一:

<!-- Define a HTTP/1.1 Connector on port 8443, JSSE NIO implementation -->

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" .../>

或者,要指定 APR 聯結器(APR 庫必須可用),請使用:

<!-- Define a HTTP/1.1 Connector on port 8443, APR implementation -->
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
           port="8443" .../>

在$ CATALINA_BASE / conf / server.xml 檔案中配置聯結器

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="${user.home}/.keystore" keystorePass="changeit"
           clientAuth="false" sslProtocol="TLS"/>

如果在此處更改埠號,則還應更改為非 SSL 聯結器上的 redirectPort 屬性指定的值。這允許 Tomcat 根據 Servlet 規範的要求,自動重定向嘗試訪問具有安全約束的頁面的使用者,該安全約束指定需要 SSL。

在 web.xml 中為特定專案配置

<security-constraint> 
  <web-resource-collection> 
    <web-resource-name>SUCTR</web-resource-name> 
    <url-pattern>/*</url-pattern>      
  </web-resource-collection> 
  <user-data-constraint> 
    <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
  </user-data-constraint> 
</security-constraint>

從證書頒發機構安裝證書

  1. 建立本地證書籤名請求(CSR)

  2. 如上所述建立本地自簽名證書

  3. 然後建立 CSR

 $ keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr
    -keystore <your_keystore_filename>

現在你有一個名為 certreq.csr 的檔案,你可以將其提交給證書頒發機構

匯入證書

現在你已擁有證書,並且可以將其匯入本地金鑰庫。首先,你必須將鏈證書或根證書匯入金鑰庫。之後,你可以繼續匯入證書。

  1. 從你獲得證書的證書頒發機構下載鏈證書

  2. 將鏈證書匯入你的金鑰庫

 $ keytool -import -alias root -keystore <your_keystore_filename>
    -trustcacerts -file <filename_of_the_chain_certificate>
  1. 最後匯入新證書
 keytool -import -alias tomcat -keystore <your_keystore_filename>
    -file <your_certificate_filename>

參考: 這裡