標籤:大於 伺服器 tomcat7 host span 否則 constrain 字串 reads
一、HTTPS的基本工作原理:
HTTPS在傳輸資料之前需要用戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱式加密,對稱式加密以及HASH演算法。握手過程的簡單描述如下:
1.瀏覽器將自己支援的一套加密規則發送給網站。
2.網站從中選出一組密碼編譯演算法與HASH演算法,並將自己的身份資訊以認證的形式發回給瀏覽器。認證裡麵包含了網站地址,加密公開金鑰,以及認證的頒發機構等資訊。
3.獲得網站認證之後瀏覽器要做以下工作:
a) 驗證認證的合法性(頒發認證的機構是否合法,認證中包含的網站地址是否與正在訪問的地址一致等),如果認證受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出認證不受信的提示。
b) 如果認證受信任,或者是使用者接受了不受信的認證,瀏覽器會產生一串隨機數的密碼,並用認證中提供的公開金鑰加密。
c) 使用約定好的HASH計算握手訊息,並使用產生的隨機數(密碼)對訊息進行加密,最後將之前產生的所有資訊發送給網站。
4.網站接收瀏覽器發來的資料之後要做以下的操作:
a) 使用自己的私密金鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手訊息,發送給瀏覽器。
5.瀏覽器解密並計算握手訊息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器產生的隨機密碼並利用對稱式加密演算法進行加密。
這裡瀏覽器與網站互相發送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH演算法如下:
非對稱式加密演算法:RSA,DSA/DSS
對稱式加密演算法:AES,RC4,3DES
HASH演算法:MD5,SHA1,SHA256
其中非對稱式加密演算法用於在握手過程中加密產生的密碼,對稱式加密演算法用於對真正傳輸的資料進行加密,而HASH演算法用於驗證資料的完整性。由於瀏覽器產生的密碼是整個資料加密的關鍵,因此在傳輸的時候使用了非對稱式加密演算法對其加密。非對稱式加密演算法會產生公開金鑰和私密金鑰,公開金鑰只能用於加密資料,因此可以隨意傳輸,而網站的私密金鑰用於對資料進行解密,所以網站都會非常小心的保管自己的私密金鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密串連斷開,從而阻止了隱私資訊的傳輸。
二、服務端認證的產生:
開啟mac上的終端,使用keytool為Tomcat產生認證,假定目標機器的網域名稱是“localhost”,keystore檔案存放在“/Users/使用者名稱/工作/CA/”目錄下,名稱叫做“tomcat.keystore”,使用“RSA”加密,口令為“password”,到期時間為100年,使用如下命令產生:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore /Users/使用者名稱/工作/CA/tomcat.keystore -validity 36500
(參數簡要說明:“/Users/使用者名稱/工作/CA/tomcat.keystore”是認證檔案的儲存路徑,認證檔案名稱是tomcat.keystore ;“-validity 36500”含義是認證有效期間,36500表示100年,預設值是90天 “tomcat”為自訂認證名稱)。
在命令列填寫必要參數:
A、 輸入keystore密碼:此處需要輸入大於6個字元的字串。
B、 “您的名字與姓氏是什嗎?”這是必填項,並且必須是tomcat部署主機的網域名稱或者IP[如:gbcom.com 或者 10.1.25.251](就是你將來要在瀏覽器中輸入的訪問地址),否則瀏覽器會彈出警告視窗,提示使用者認證與所在域不匹配。在本地做開發測試時,應填入“localhost”。
C、 你的組織單位名稱是什嗎?”、“您的組織名稱是什嗎?”、“您所在城市或地區名稱是什嗎?”、“您所在的州或者省份名稱是什嗎?”、“該單位的兩字母國家代碼是什嗎?”可以按照需要填寫也可以不填寫直接斷行符號,在系統詢問“正確嗎?”時,對照輸入資訊,如果符合要求則使用鍵盤輸入字母“y”,否則輸入“n”重新填寫上面的資訊。
D、 輸入的主密碼,這項較為重要,會在tomcat設定檔中使用,建議輸入與keystore的密碼一致,設定其它密碼也可以,完成上述輸入後,直接斷行符號則在你在第二步中定義的位置找到產生的檔案。
三、用戶端認證的產生:
為瀏覽器產生認證,以便讓伺服器來驗證它。為了能將認證順利匯入至IE和Firefox,認證格式應該是PKCS12,因此,使用如下命令產生:
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore /Users/使用者名稱/工作/CA/mykey.p12
(mykey為自訂)
對應的認證庫存放在“/Users/使用者名稱/工作/CA/mykey.p12”,用戶端的CN可以是任意值。雙擊mykey.p12檔案,即可將認證匯入至瀏覽器(用戶端)。
四、服務端信任用戶端認證:
由於是雙向SSL認證,伺服器必須要信任用戶端認證,因此,必須把用戶端認證添加為伺服器的信任認證。由於不能直接將PKCS12格式的認證庫匯入,必須先把用戶端認證匯出為一個單獨的CER檔案,使用如下命令:
keytool -export -alias mykey -keystore /Users/使用者名稱/工作/CA/mykey.p12 -storetype PKCS12 -storepass password -rfc -file /Users/使用者名稱/工作/CA/mykey.cer
(mykey為自訂與用戶端定義的mykey要一致,password是你設定的密碼)。通過以上命令,用戶端認證就被我們匯出到“/Users/使用者名稱/工作/CA/mykey.cer”檔案了。
下一步,是將該檔案匯入到伺服器的認證庫,添加為一個信任認證使用命令如下:
keytool -import -v -file /Users/使用者名稱/工作/CA/mykey.cer -keystore /Users/使用者名稱/工作/CA/tomcat.keystore
通過list命令查看伺服器的認證庫,可以看到兩個認證,一個是伺服器憑證,一個是受信任的用戶端認證:
keytool -list -keystore /Users/使用者名稱/工作/CA/tomcat.keystore
(tomcat為你設定伺服器端的認證名)。
五、用戶端信任服務端認證:
由於是雙向SSL認證,用戶端也要驗證伺服器憑證,因此,必須把伺服器憑證添加到瀏覽器的“可信任的根憑證授權單位”。由於不能直接將keystore格式的認證庫匯入,必須先把伺服器憑證匯出為一個單獨的CER檔案,使用如下命令:
keytool -keystore /Users/使用者名稱/工作/CA/tomcat.keystore -export -alias tomcat -file /Users/使用者名稱/工作/CA/tomcat.cer
(tomcat為你設定伺服器端的認證名)。
通過以上命令,伺服器憑證就被我們匯出到“/Users/使用者名稱/工作/CA/tomcat.cer”檔案了。雙擊tomcat.cer檔案,按照提示安裝認證,將認證填入到“可信任的根憑證授權單位”。
六、配置Tomcat伺服器使其支援HTTPS:
1、開啟Tomcat根目錄下的/conf/server.xml,找到Connector port=”8443”配置段,去掉注釋並修改如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="/Users/使用者名稱/工作/CA/tomcat.keystore" keystorePass="password" truststoreFile="/Users/使用者名稱/工作/CA/tomcat.keystore" truststorePass="password"/>
2、開啟/conf/web.xml,在最後添加如下內容進行HTTPS強制訪問:
<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
這樣tomcat就能支援SSL雙向認證了。
在這裡要注意:
1、tomcat6中protocol=”HTTP/1.1”,
tomcat7中protocol=”org.apache.coyote.http11.Http11Protocol”;
2、如果要用Eclipse進行測試,必須修改Eclipse工作目錄(workspace)下Servers檔案夾下的tomcat設定檔才會生效,修改tomcat實際目錄下的設定檔是無效的,切記!
3、server.xml檔案中非SSL的Connector不能刪除,刪除後tomcat啟動不了,會報逾時錯誤,切記!
4、如果只是支援用戶端認證服務端把clientAuth改為false就可以了。
mac tomcat https