tomcat https 配置
以前基本上筆者對于安全性考慮的并不多,最近因為saas平臺要開始逐漸推廣,所以需要開始逐漸加強xss/crsf/https等措施以避免潛在的安全性風險。本文簡單的記錄下tomcat下https的配置。
注意:在實際的系統中,很少會直接在tomcat上配置https對外提供服務,一般是通過在nginx上配置https接入,轉發給內部tomcat服務器時轉換為http。具體可參考http://www.cnblogs.com/zhjh256/p/6262620.html。
PS:獲取證書的方式有很多種,去三方網站申請(免費版和收費版)或自己生成(jdk自帶的keytool工具,使用jdk keytool生成的數字證書是自簽名的。自簽名就是指證書只能保證自己是完整且沒有經過非法修改,但是無法保證這個證書是屬于誰的。為了對自簽名證書進行認證,需要每個客戶端和服務端都交換自己自簽名的私有證書,對于一個大型網站或者應用服務器,這種工作量是非常大的。
各瀏覽器以及版本、各類庫比如openssl、jsse等對TLS的支持情況可參考https://en.wikipedia.org/wiki/Transport_Layer_Security,其中有非常完整的說明以及各版本的支持情況。當前openssl的發行版本包括如下:
- 0.9.x
- 1.0.0
- 1.0.1
- 1.0.2
- 1.1.0
- fips
可從openssl官方網站下載。
提及TLS,還設計一個關鍵的概念startTls,因為在SSL開始的握手階段,仍然是采用明文進行交互的,這使得在初始階段可能發生被截獲的情況,為了避免這種風險,產生了startTls,具體可見https://wiki.inspircd.org/STARTTLS_Documentation,https://en.wikipedia.org/wiki/Opportunistic_TLS。
基于自簽名的SSL雙向認證,只要客戶端或者服務端修改了密鑰和證書,就需要重新進行簽名和證書交換,這種調試和維護工作量是非常大的。因此,在實際的商用系統中往往會使用第三方CA證書頒發機構進行簽名和驗證。我們的瀏覽器就保存了幾個常用的CA_ROOT。每次連接到網站時只要這個網站的證書是經過這些CA_ROOT簽名過的。就可以通過驗證了。
)。當然我們自己測試的時候,肯定是要用免費的。服務器類型:Apache,IIS,Nginx,Tomcat, other Server。就是說,ssl證書時按照這幾種類型生成對應不同文件的,當然配置也不一樣。
比如配置tomcat的https,免費的一般建議直接使用java安裝時自帶的keytool即可,如果是nginx,則需要使用openssl生成(如果是三方CA頒發的,直接在對應的網站上操作生成即可)。
建議把相關證書和key放在$TOMCAT_HOME/security下,便于統一管理。
建議命名規范為:
ca-key.pem 一般來說是CA證書的rsa私鑰文件
ca.pem ? 可信Certificate Authority (CA)證書,通常內部通信的話,可以自簽名,通過openssl?req?-new?-x509生成。
client-cert.pem 客戶端公鑰證書(一般HTTPS不用,瀏覽器會自動管理,但是自行開發的客戶端就需要了,比如java rpc,jdbc客戶端)
client-key.pem 客戶端私鑰(一般HTTPS不用,瀏覽器會自動管理,但是自行開發的客戶端就需要了,比如java rpc,jdbc客戶端)
server-cert.pem 服務器公鑰證書,必須由擁有它的CA認證
server-key.pem 服務器私鑰
D:\Java\jdk1.8.0_102\bin>keytool
密鑰和證書管理工具
命令:
-certreq 生成證書請求
-changealias 更改條目的別名
-delete 刪除條目
-exportcert 導出證書
-genkeypair 生成密鑰對
-genseckey 生成密鑰
-gencert 根據證書請求生成證書
-importcert 導入證書或證書鏈
-importpass 導入口令
-importkeystore 從其他密鑰庫導入一個或所有條目
-keypasswd 更改條目的密鑰口令
-list 列出密鑰庫中的條目
-printcert 打印證書內容
-printcertreq 打印證書請求的內容
-printcrl 打印 CRL 文件的內容
-storepasswd 更改密鑰庫的存儲口令
使用 "keytool -command_name -help" 獲取 command_name 的用法
D:\Java\jdk1.8.0_102\bin>keytool -genkey -alias tomcat -keyalg RSA
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: ldtrader.com ?#這里的名稱很重要,建議使用官網的地址
您的組織單位名稱是什么?
[Unknown]: ldtrader
您的組織名稱是什么?
[Unknown]: ldtrader
您所在的城市或區域名稱是什么?
[Unknown]: hz
您所在的省/市/自治區名稱是什么?
[Unknown]: zj
該單位的雙字母國家/地區代碼是什么?
[Unknown]: cn
CN=ldtrader.com, OU=ldtrader, O=ldtrader, L=hz, ST=zj, C=cn是否正確?
[否]: y
輸入 <tomcat> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
完畢后會在當前目錄下,會在$HOME下(比如C:\Users\dell)產生一個:.keystore文件,將它拷貝到tomcat的bin目錄下。
D:\apache-tomcat-7.0.69\bin>keytool -selfcert -alias tomcat -keystore .keystore
輸入密鑰庫口令:
D:\apache-tomcat-7.0.69\bin>keytool -export -alias tomcat -keystore .keystore -storepass tomcat -rfc -file tomcat.cer
存儲在文件 <tomcat.cer> 中的證書
此時會在D:\apache-tomcat-7.0.69\bin>下生成tomcat.cer證書文件。將該文件發給使用者,讓他們安裝該證書,并將證書安裝在“受信任的根證書頒發機構”區域中。
1.2 配置tomcat
打開$CATALINA_BASE/conf/server.xml?找到“SSL HTTP/1.1 Connector” 那一塊,取消注釋并將它改成:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="bin/.keystore" keystorePass="tomcat"?
clientAuth="false" sslProtocol="TLS" />
修改windows機器的host文件,增加一行:
127.0.0.1?ldtrader.com
?接下來重啟tomcat,用https://ldtrader.com:8443/訪問網站驗證一下就行了。
可參考鏈接http://jingyan.baidu.com/article/ce43664919d1383773afd39f.html,進行chrome證書導入后就可直接訪問,不會再提示下列信息:
?keytool參考手冊https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html
通常來說配置https算是web安全性中最省事的環節,更重要的是,應用中對于session/cookie/csrf/xss進行保護。比如:
對于cookie來說,需要進行HttpOnly和Secure保護,如下:
cookie.setHttpOnly(true);
cookie.setSecure(true);
啟用HSTS,通常在http服務器層進行設置,"Strict-Transport-Security", "max-age=31536000; includeSubDomains"
等等。
總結
以上是生活随笔為你收集整理的tomcat https 配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发原则
- 下一篇: ArcEngine判断要素(featur