1. 程式人生 > >HTTPS_SSL配置的步驟以及原理說明

HTTPS_SSL配置的步驟以及原理說明

前面

1.單向認證,就是傳輸的資料加密過了,但是不會校驗客戶端的來源

2.雙向認證,如果客戶端瀏覽器沒有匯入客戶端證書,是訪問不了web系統的,找不到地址,想要用系統的人沒有證書就訪問不了系統


HTTPS概念

在說HTTPS之前先說說什麼是HTTP,HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全。為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之後IETF對SSL 3.0進行了升級,於是出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支援,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀的事情,SSL最後一個版本是3.0,今後TLS將會繼承SSL優良血統繼續為我們進行加密服務。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。

 

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握手過程中如果有任何錯誤,都會使加密連線斷開,從而阻止了隱私資訊的傳輸。

 

HTTPS_SSL配置的步驟:

伺服器端單向認證:

第一步:進入jdk的安裝檔案路徑下面的bin目錄;

第二步:在bin目錄下輸入以下命令

keytool -genkey -alias "tomcat" -keyalg "RSA" -keystore "D:\JavaTools\tomcat\tomcat.keystore"

之後輸入kestore的密碼,需要輸入兩次

然後,需要你輸入城市、省份、國家的名稱,這個可以隨便填寫,按回車

之後會把資訊都打印出來,讓你確認資訊,輸入y,按回車

然後要求我們輸入tomcat的主密碼,我們設定跟keystore相同,按回車

好了,我們的證書生成好了,去主目錄看一下吧,tomcat.keystore

第三步:

開啟tomcat根目錄下的conf/server.xml,在service標籤下新增一個connector標籤,同時將之前8080的connector註釋掉:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/JavaTools/tomcat/tomcat.keystore"
keystorePass="tomcat"/>

屬性 描述
clientAuth 如果設為true,表示Tomcat要求所有的SSL客戶出示安全證書,對SSL客戶進行身份驗證
keystoreFile 指定keystore檔案的存放位置,可以指定絕對路徑,也可以指定相對於<CATALINA_HOME>(Tomcat安裝目錄)環境變數 的相對路徑。如果此項沒有設定,預設情況下,Tomcat將從當前作業系統使用者的使用者目錄下讀取名為“.keystore”的檔案。
keystorePass 指定keystore的密碼,如果此項沒有設定,在預設情況下,Tomcat將使用“changeit”作為預設密碼。
sslProtocol 指定套接字(Socket)使用的加密/解密協議,預設值為TLS,使用者不應該修改這個預設值。
ciphers 指定套接字可用的用於加密的密碼清單,多個密碼間以逗號(,)分隔。如果此項沒有設定,在預設情況下,套接字可以使用任意一個可用的密碼。

啟動tomcat,在瀏覽器中輸入:https://localhost:8443/ 

tomcat就可以進行https訪問了

第四步:如果修改專案,使專案進行https訪問,則需要修改xml檔案:

新增如下程式碼:

<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>

<security-constraint>
<!-- Authorization setting for SSL -->
<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>

 

可能存在的問題1:

Eclipse中啟動tomcat8.0,本地tomcat配置檔案被eclipse覆蓋。

問題是這樣的,在eclipse的servers配置項裡,將tomcat的啟動配置為了use tomcat location,

但是每次在eclipse裡publish專案都會把本地D:\JavaTools\tomcat\apache-tomcat-8.0.53\conf下的配置檔案server.xml給重置,

也就是裡面新增的內容被清空了,

問題解決方案:

你eclipse工程列表中應該 還有個 Servers工程,

下面會有Tomcat8的配置檔案,你把裡面的對應配置檔案改了(server.xml)。每次是用這個檔案來覆蓋,tomcat下面的檔案的。

修改之後就可以訪問了:

https://localhost:8443/ippc-web-dfd/

 可能存在的問題2:

修改埠號,預設的是8443

除了需要修改上面的connector之後,還需要修改如下兩個地方,對應的8443

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

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

  

參考:

https://jingyan.baidu.com/article/e4d08ffdb61f040fd3f60d48.html

https://jingyan.baidu.com/article/a948d6515d3e850a2dcd2ee6.html

https://jingyan.baidu.com/article/15622f2420ee40fdfcbea5ca.html