天天看點

項目安全 資料加密傳輸——RSA和HTTPS

一、RSA

資料加密傳輸

漏洞:HTTP所有的通路都是明文的,隻要能夠監聽到網絡,所有的請求資料全是透明的;

加密傳輸:

1,在表單送出之前,使用自己的一個加密算法對使用者名/密碼進行加密,然後再送出,背景根據算法,對送出的資料進行解密;

缺陷:前端JS加密(可逆的);在網絡上的資料是加密的,但是如果能夠看到我這段加密的js,就能解密;(JS混淆)

2,對稱加密算法;

缺陷:需要非常大量的密鑰,背景怎麼去管理密鑰池;

3,非對稱加密算法;

公鑰/私鑰:如果一段明文,使用加密算法(明文,公鑰)—>密文;這個密文,就算知道了加密算法,知道了公鑰,也沒法解密;隻能使用這個公鑰對應的私鑰,才能夠解密;

公鑰就可以随意的對外公布,我隻需要隐藏好這個公鑰對應的私鑰即可; 缺陷:隻要知道公鑰對應的私鑰,所有的密文都能夠統一解密;

項目安全 資料加密傳輸——RSA和HTTPS
二、 HTTPS

HTPPS簡介

1, HTTP上傳輸的所有資料都是明文,于是出現了SSL(Secure Sockets Layer安全套接字層)協定用于對HTTP協定進行加密傳輸,HTTP+SSL就是HTTPS;

2, IETF對SSL進行了更新,就是TLS(Transport Layer Security),其實我們現在說的HTTPS都是使用的是TLS;

3, HTTPS可以做到以下幾點:

用戶端信任主機;

通訊過程的資料加密和防止篡改

HTTPS原理

1,在執行傳輸之前,需要用戶端和服務端進行一次握手協定,通過握手協定确定伺服器端的合法性和确定雙方在傳輸過程中使用的密碼資訊;

2,通信過程使用密碼資訊完成資料的加密傳輸和完整性校驗;

握手協定過程: 1,浏覽器将自己支援的一套加密規則(SSL版本号,浏覽器支援的加密算法種類)發送給網站;

2,網站确定一組對應的加密算法和HASH算法,并将網站的身份資訊以證書(SSL證書)(網站位址,加密公鑰,以及證書的頒發機構等資訊)形式發送給用戶端;

3,浏覽器接收到網站發送的證書并執行操作:

1,驗證證書的合法性(作業系統都安裝有各大CA中心的相關資訊),包括CA機構的合法性和通路的站點是否和目前正在通路的網站位址一緻;

2,證書合法或者使用者同意信任不能識别的證書,浏覽器端生成一個随機數(密碼RANDOM),并用證書中的公鑰加密(A);

3,浏覽器生成一個握手資訊(簡單了解為一個字元串,比如"hello"),使用确定的HASH算法計算得到握手資訊的HASH值,并使用随機數對握手資訊進行加密(B),将所有相關資訊發送給網站;

4,網站接收到浏覽器發送的資料并執行操作:

1,使用私鑰解密出浏覽器發送的加密資料(A),得到浏覽器生成的密碼RANDOM;

2,使用RANDOM對加密的握手資訊(B)進行解密,得到握手資訊(hello);

3,用确定的HASH算法計算握手資訊,得到一個HASH值,比對這個HASH值和用戶端傳上來的HASH值是否一緻;

4,用同樣的密碼(RANDOM)也加密一段握手資訊+HASH值,并發送給浏覽器端;

5,浏覽器端再次接受到網站發送的資訊,使用相同的方式确定HASH值是否一緻;如果一緻,完成握手協定;

6,之後所有的浏覽器和伺服器之前的通信内容,都使用這個密碼(RANDOM)進行加密和解密;

7,在整個過程中出現任何的錯誤,都會讓浏覽器和網站的連接配接斷開;

三、SSL證書

1,通過FireFox檢視SSL證書;

2,證書的申請;

3,SSL證書的驗證過程:

1,一個SSL證書是由根證書+中級證書+SSL證書構成一個證書鍊;

2,證書鍊上的每一級證書都必須要通過信任,證書才能信任;根證書機構在作業系統中預設安裝;(可以通過certmgr.msc檢視預設安裝)

浏覽器使用内置的根證書中的公鑰來對收到的證書進行認證,如果一緻,就表示該安全證書是由可信任的頒證機構簽發的,這個網站就是安全可靠的;如果該SSL證書不是根伺服器簽發的,浏覽器就會自動檢查上一級的發證機構,直到找到相應的根證書頒發機構,如果該根證書頒發機構是可信的,這個網站的SSL證書也是可信的。

項目安全 資料加密傳輸——RSA和HTTPS

四、tomcat支援http請求 ,

使用java/bin下的keytool工具生成一個證書(這個證書是不受信任的);keytool

-genkey -alias tomcat -keyalg RSA

2,配置tomcat,使用生成的keystore:

SSLEnabled=“true” acceptCount=“100” clientAuth=“false”

disableUploadTimeout=“true” enableLookups=“false” maxThreads=“25”

port=“8443” keystoreFile=“C:/Users/administrator/.keystore” keystorePass=“password”

protocol=“org.apache.coyote.http11.Http11NioProtocol” scheme=“https”

secure=“true” sslProtocol=“TLS”

3,通路https://localhost:8443/index.do

上一篇: Qt項目建立

繼續閱讀