Https協議中SSL協議的認證過程

         在Https協議傳輸的過程中,如何確認接收方是真正的服務器端,而不是黑客呢?   SSL證書可以解決這個問題。

SSL(Secure Socket Layer,安全套接字層):1994年爲 Netscape 所研發,SSL 協議位於 TCP/IP 協議與各種應用層協議之間,爲數據通訊提供安全支持。

TLS(Transport Layer Security,傳輸層安全):其前身是 SSL,它最初的幾個版本(SSL 1.0、SSL 2.0、SSL 3.0)由網景公司開發,1999年從 3.1 開始被 IETF 標準化並改名,發展至今已經有 TLS 1.0、TLS 1.1、TLS 1.2 三個版本。SSL3.0和TLS1.0由於存在安全漏洞,已經很少被使用到。TLS 1.3 改動會比較大,目前還在草案階段,目前使用最廣泛的是TLS 1.1、TLS 1.2。

第一部分 下面就來詳細分析一下Https協議的前面兩個步驟:


如上圖所示,在第 ② 步時服務器發送了一個SSL證書給客戶端,SSL 證書中包含的具體內容有:

(1)證書的發佈機構CA

(2)證書的有效期

(3)公鑰

(4)證書所有者

(5)簽名

………

於是,客戶端在接受到服務端發來的SSL證書時,會對證書的真僞進行校驗,以瀏覽器爲例說明如下:

(1)首先瀏覽器讀取證書中的證書所有者、有效期等信息進行一一校驗

(2)瀏覽器開始查找操作系統中已內置的受信任的證書發佈機構CA,與服務器發來的證書中的頒發者CA比對,用於校驗證書是否爲合法機構頒發

(3)如果找不到,瀏覽器就會報錯,說明服務器發來的證書是不可信任的。

(4)如果找到,那麼瀏覽器就會從操作系統中取出 頒發者CA 的公鑰,然後對服務器發來的證書裏面的簽名進行解密

(5)瀏覽器使用相同的hash算法計算出服務器發來的證書的hash值,將這個計算的hash值與證書中籤名做對比

(6)對比結果一致,則證明服務器發來的證書合法,沒有被冒充

(7)此時瀏覽器就可以讀取證書中的公鑰,用於後續加密了

第二部分 這裏提到的簽名,一般就是一串字符串的hash值,對於Java中的hash算法,使用MD5或者SHA。這裏說明一下MD5算法。

md5加密算法是用的比較多的一種加密方式,一個加密內容只能生成一個加密後的內容,而且還不能進行解密的;所以在日常的生活中用於生成一些本地圖片的路徑或者是需要生成唯一的字符串的時候,我們都會用到該加密算法。MD5加密算法可以分爲16位加密和32加密的,其實所謂的16位的加密算法只是在32位的加密算法中截取了第8位到第24位字符串,總共16位的字符串,故而叫做是16位的MD5加密算法。

算法例子:

public class MD5Encry {

public static String  md5Entye(String str) throws Exception{
MessageDigest md5=  MessageDigest.getInstance("MD5");
    BASE64Encoder base64en = new BASE64Encoder();
    //加密後的字符串
    String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
return newstr;
}

}

測試代碼:

public static void testMD5(){
String str = "123456";
System.out.println("before entye:"+str);
String afterEntype;
try {
afterEntype = MD5Encry.md5Entye(str);
System.out.println("afterEntype:"+afterEntype);
str = "0123456789";
System.out.println("change the str:"+str);
System.out.println("change afterEntype:"+MD5Encry.md5Entye(str));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

測試結果如下:

before entye:123456
afterEntype:4QrcOUm6Wau+VuBX8g+IPg==
change the str:0123456789

change afterEntype:eB5eJF1ptWaXm4bijSPyxw==

不同的值,計算出來的簽名一定不一樣。


第三部分 總結

所以通過發送SSL證書的形式,既解決了公鑰獲取問題,又解決了黑客冒充問題,一箭雙鵰。HTTPS加密過程也就此形成。

所以相比HTTP,HTTPS 傳輸更加安全

(1) 所有信息都是加密傳播,黑客無法竊聽。

(2) 具有校驗機制,一旦被篡改,通信雙方會立刻發現。

(3) 配備身份證書,防止身份被冒充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章