1. 程式人生 > >SSL+Tomcat配置及其原理

SSL+Tomcat配置及其原理

SSL協議使用不對稱加密技術實現雙方之間資訊的安全傳遞。可以實現資訊傳遞的保密性、完整性,並且會話雙方能鑑別對方身份。
與網站建立https連線時,瀏覽器與WEB SERVER之間要經過一個握手的過程來完成身份鑑定與金鑰交換,建立安全連線。過程是:
1、使用者瀏覽器將其SSL版本號、加密設定引數、與session有關的資料以及其它一些必要資訊傳送到伺服器
2、伺服器將其SSL版本號、加密設定引數、與session有關的資料以及其它必要資訊傳送給瀏覽器,同時發給瀏覽器的還有伺服器的證書。如果配置伺服器的SSL需要驗證使用者身份,還要發出請求瀏覽器提供使用者證書。
3、客戶端檢查伺服器證書,如果檢查失敗,提示不能建立SSL連線,如果成功,則繼續

4、客戶端瀏覽器為本次會話生成pre-master secret,並將其用伺服器公鑰加密後傳送給伺服器。
5、如果伺服器要求鑑別客戶身份,客戶端還要再對另外一些資料簽名後並將其與客戶端證書一起傳送給伺服器。
6、如果伺服器要求鑑別客戶身份,則檢查簽署客戶證書的CA是否可信。如果不在信任列表中,結束本次會話。如果檢查通過,伺服器用自己的私鑰解密收到的 pre-master secret,並用它通過某些演算法生成本次會話的master secret。
7、客戶端與伺服器均使用此master secret生成本次會話的會話金鑰(對稱金鑰)。在雙方SSL握手結束後傳遞任何訊息均使用此會話金鑰。這樣做的主要原因是對稱加密比非對稱加密的運算量低一個數量級以上,能夠顯著提高雙方會話時的運算速度。

8、客戶端通知伺服器此後傳送的訊息都使用這個會話金鑰進行加密。並通知伺服器客戶端已經完成本次SSL握手。
9、伺服器通知客戶端此後傳送的訊息都使用這個會話金鑰進行加密。並通知客戶端伺服器已經完成本次SSL握手。
10、本次握手過程結束,會話已經建立。雙方使用同一個會話金鑰分別對傳送以及接受的資訊進行加、解密。

1、生成伺服器端證書檔案

 keytool -genkey -v -alias mykey -keyalg RSA -validity 3650 -keystore c:\sdust.keystore 
       -dname "CN=你的ip,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456
引數注意:
A、輸入keystore密碼:此處需要輸入大於6個字元的字串
B、“您的名字與姓氏是什麼?”這是必填項,並且必須是TOMCAT部署主機的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你將來要在瀏覽器中輸入的訪問地址
C、“你的組織單位名稱是什麼?”、“您的組織名稱是什麼?”、“您所在城市或區域名稱是什麼?”、“您所在的州或者省份名稱是什麼?”、“該單 位的兩字母國家程式碼是什麼?”可以按照需要填寫也可以不填寫直接回車,在系統詢問“正確嗎?”時,對照輸入資訊,如果符合要求則使用鍵盤輸入字母“y”, 否則輸入“n”重新填寫上面的資訊
D、輸入<tomcat>的主密碼,這項較為重要,會在tomcat配置檔案中使用,建議輸入與keystore的密碼一致,設定其它密碼也可以


l        完成上述輸入後,直接回車則在你在第二步中定義的位置找到生成的檔案

2、配置TOMCAT伺服器

(1)    如果你是在Windows環境中生成證書檔案,則需要將生成的證書tomcat.keystore拷貝到Tomcat將要引用的位置,假設tomcat的 應用證書的路徑是“/etc/tomcat.keystore”,則需要將證書檔案拷貝到“etc/”下;如果是在Linux環境按照上述介紹的步驟生成 證書檔案的話,此時證書檔案已經在“etc/”下。

(2)    配置Tomcat,開啟$CATALINA_HOME/conf/server.xml,修改如下,

<Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
   redirectPort="8443" />

修改引數=>

<Connector port="80" protocol="HTTP/1.1"
   connectionTimeout="20000"
    redirectPort="443" />
我專案裡面的設定是:

<Connector  executor="tomcatThreadPool"
               port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
        acceptCount="100"
        useBodyEncodingForURI="true"
             enableLookups="false"
               redirectPort="443" />
不僅設定了ssl,還設定了執行緒池。


<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

              maxThreads="150" scheme="https" secure="true"

              clientAuth="false" sslProtocol="TLS"/>

-->

去掉註釋且修改引數=>

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true" useBodyEncodingForURI="true"
       clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="412385524"/>

註釋:標識為淡藍色的兩個引數,分別是證書檔案的位置和<tomcat>的主密碼,在證書檔案生成過程中做了設定
且這裡記得要加上useBodyEncodingForURI="true"項,否則tomcat傳遞的時候漢字傳遞為亂碼。

<!--
   <Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
-->

修改引數=>

<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />

(3) 開啟$CATALINA_HOME/conf/web.xml,在該檔案末尾增加:
<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>

3、上述配置完成後,重啟TOMCAT後即可以使用SSL。IE位址列中可以直接輸入地址不必輸入“http://” 或者 “https://” ;也可以輸入 “http:// ” 會跳轉成為 “https://” 來登入

4、注意事項:
(1)生成證書的時間,如果IE客戶端所在機器的時間早於證書生效時間,或者晚於有效時間,IE會提示“該安全證書已到期或還未生效”
(2)如果IE提示“安全證書上的名稱無效或者與站點名稱不匹配”,則是由生成證書時填寫的伺服器所在主機的域名“您的名字與姓氏是什麼?”/“What is your first and last name?”不正確引起的

5、遺留問題:
(1)如果AC主機不能通過域名查詢,必須使用IP,但是這個IP只有在配置後才能確定,這樣證書就必須在AC確定IP地址後才能生成
(2)證書檔案只能繫結一個IP地址,假設有10.1.25.250 和 192.168.1.250 兩個IP地址,在證書生成檔案時,如使用了10.1.25.250,通過IE就只能使用10.1.25.250 來訪問AC-WEB,192.168.1.250是無法訪問AC-WEB的。
tomcat預設的ssl埠是8443,而標準的ssl埠是443,設定443之後,就不用在後面輸入埠號就可以直接使用ssl埠訪問了。