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 證書如何建立安全連線
-
當瀏覽器嘗試訪問受 SSL 保護的網站時,瀏覽器和 Web 伺服器使用稱為“SSL 握手”的程序建立 SSL 連線
-
實質上,三個金鑰用於設定 SSL 連線:公鑰,私鑰和會話金鑰。
建立安全連線的步驟
-
瀏覽器連線到使用
SSL(https)
保護的 Web 伺服器(網站)。瀏覽器請求伺服器標識自己。 -
伺服器傳送其 SSL 證書的副本,包括伺服器的公鑰。
-
瀏覽器根據受信任的 CA 列表檢查證書根目錄,並且證書未過期,未撤消,並且其公用名對其所連線的網站有效。如果瀏覽器信任該證書,它將使用伺服器的公鑰建立,加密和發回對稱會話金鑰。
-
伺服器使用其私鑰解密對稱會話金鑰,併發回用會話金鑰加密的確認以啟動加密會話。
-
伺服器和瀏覽器現在使用會話金鑰加密所有傳輸的資料。
SSL / TLS 和 Tomcat
請務必注意,配置 Tomcat 以利用安全套接字通常僅在將其作為獨立 Web 伺服器執行時才需要。
如果將 Tomcat 主要作為 Servlet / JSP 容器執行在另一個 Web 伺服器(例如 Apache 或 Microsoft IIS)後面,通常需要配置主 Web 伺服器以處理來自使用者的 SSL 連線。
證書
為了實現 SSL,Web 伺服器必須為接受安全連線的每個外部介面(IP 地址)具有關聯的證書。證書作為數字驅動程式許可證。
-
這個駕駛執照由其所有者以加密方式簽署,因此其他任何人都難以偽造
-
證書通常從著名的證書頒發機構(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>
執行此命令後,將首先提示你
- 金鑰庫密碼
- 有關此證書的一般資訊,例如公司,聯絡人姓名等。
最後,系統將提示你輸入金鑰密碼,該密碼是專門用於此證書的密碼(與儲存在同一金鑰庫檔案中的任何其他證書相對)。
如果一切都成功,你現在擁有一個金鑰庫檔案,其中包含可供伺服器使用的證書。
編輯 Tomcat 配置檔案
Tomcat 可以使用兩種不同的 SSL 實現:
-
JSSE 實現作為 Java 執行時的一部分提供(自 1.4 起)
Java 安全套接字擴充套件(JSSE)支援安全的 Internet 通訊。它為 Java 版本的 SSL 和 TLS 協議提供了框架和實現,幷包括資料加密,伺服器身份驗證,訊息完整性和可選客戶端身份驗證的功能
JSSE API 旨在允許無縫插入其他 SSL / TLS 協議和公鑰基礎結構(PKI)實現。開發人員還可以提供備用邏輯,以確定是否應該信任遠端主機,或者應該將哪些身份驗證金鑰材料傳送到遠端主機。
-
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>
從證書頒發機構安裝證書
-
建立本地證書籤名請求(CSR)
-
如上所述建立本地自簽名證書
-
然後建立 CSR
$ keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr
-keystore <your_keystore_filename>
現在你有一個名為 certreq.csr 的檔案,你可以將其提交給證書頒發機構
匯入證書
現在你已擁有證書,並且可以將其匯入本地金鑰庫。首先,你必須將鏈證書或根證書匯入金鑰庫。之後,你可以繼續匯入證書。
-
從你獲得證書的證書頒發機構下載鏈證書
-
將鏈證書匯入你的金鑰庫
$ keytool -import -alias root -keystore <your_keystore_filename>
-trustcacerts -file <filename_of_the_chain_certificate>
- 最後匯入新證書
keytool -import -alias tomcat -keystore <your_keystore_filename>
-file <your_certificate_filename>
參考: 這裡