先簡單說下什么是https,https與http區別 ,以及https的原理
什么是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與http區別
-
https協議需要到證書頒發機構(Certificate Authority,簡稱CA)申請證書,一般免費證書很少,需要交費。
-
http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
-
http和https使用的是完全不同的連接方式,使用的端口也不一樣,前者是80,后者是443。
-
http的連接很簡單,是無狀態的 。
-
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議, 要比http協議安全。
https的原理
先來看一張圖
HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的具體描述如下:
1. 瀏覽器將自己支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,並將自己的身份信息以證書的形式發回給瀏覽器。證書里面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.瀏覽器獲得網站證書之后瀏覽器要做以下工作:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的HASH算法計算握手消息,並使用生成的隨機數對消息進行加密,最后將之前生成的所有信息發送給網站。
4.網站接收瀏覽器發來的數據之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密並計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之后所有的通信數據將由之前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。
**Tomcat服務器https配置 **
這里我們使用jdk自帶的keytool工具生成證書
創建證書
keytool -genkey -alias wsria -keyalg RSA -keystore d:/worksoft/ssl/test
導出證書
keytool -export -file d:/worksoft/ssl/test.crt -alias wsria -keystore d:/worksoft/ssl/test
導入證書
keytool -import -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file d:/worksoft/ssl/test.crt -alias wsria
ps.如果提示密碼錯誤,則試一下密碼:changeit
這里會遇到一個問題,報以下錯誤:
java.io.FileNotFoundException: C:\Program Files\Java\jdk1.8.0_102\jre\lib\security\cacerts (拒絕訪問。)
因為是sdk是安裝在c盤目錄下的,是只讀權限 ,所以需要修改一下目錄權限 。
這里我通過管理員方法運行命令解決
查看證書
keytool -list -alias wsria -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
刪除證書
keytool -delete -alias wsria -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
修改tomcat配置文件server.xml
開啟83和87行的注釋代碼,並設置keystoreFile、keystorePass修改結果如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="d:/worksoft/ssl/test"
keystorePass="tomcat"/>
參數說明
keystoreFile:在第一步創建的key存放位置
keystorePass:創建證書時的密碼
重啟tomact運行訪問https://localhost:8443/
OK,配置成功
可以看到瀏覽器提示證書不安全, 現在騰訊雲和阿里雲一般都提供了免費的證書,我們只要去上面申請替換就行了
參考資料 :
微信小程序 免費SSL證書https、TLS版本問題的解決辦法
http://www.jb51.net/article/99978.htm
關於NodeJS配置HTTPS服務、阿里雲申請HTTPS證書
https://segmentfault.com/a/1190000008398220
Tomcat完美配置 HTTPS
http://lixor.iteye.com/blog/1532655
微信小程序開發https設置
https://mp.weixin.qq.com/s/Tw4UzX73Q7MSw3GJXnpN8A
window環境下的apache的https的配置
http://blog.csdn.net/tianyiii/article/details/50150565
作者:fozero
聲明:原創文章,轉載請注明出處,謝謝!http://www.cnblogs.com/fozero/p/7841859.html
標簽:https