1,434 瀏覽數

SSL

SSL(Secure Socket Layer)

Step 0:前言
SSL 是 Netscape 所提出來的資料保密協定,採用了 RC4,MD5,以及 RSA 等加密演算法再加上 CA(Certification Authority) 來確定身份所組成的.

  • RC4 為 Symmetric Algorithms 對稱式加密的一種,而所謂的對稱式加密就是加密以及解密都是使用同一支鑰匙(single Key)
  • MD5 為 One Way Hashes 的一種.他主要會產生一組固定長度字串(fingerprint or message digests),這組字串用來比對原資料是否遭到修改.
  • RSA 為 Asymmetric (Public Key) Algorithms (非對稱式)或稱公鑰密碼演算法的一種.而所謂的非對偁式加密會使用兩把公與私鑰 (Public/Private Key), public key 會當成加密用, Private key 就會當解密用
  • CA(Certification Authority) 公正的第三者,主要用來驗證公鑰的真假.

note:以上的加解密方式也可以使用不同的其他演算法來取代.如 MD5 可用 SHA1 來取代…. 其他請參考 PKI (Public Key Infrastructure)

Step1:SSL 交易方式

  1. 所謂的 SSL 就是伺服器端和使用者端的資料都經過加密的方式來傳送,而這之鑰匙就是 RC4 (對稱式加密),而這隻鑰匙是無法透過網路來傳送.因為當別人擷取這把鑰匙時,他也可以用這把鑰匙對你們的資訊加解密.
  2. 所以此時就可以用 RSA (公私鑰,非對稱式加解密)方式來傳送這把鑰匙,所以一開始時伺服器會把他的公鑰給使用者.經過公鑰將 RC4 產生的鑰匙做加密,然後經由網路傳送,至伺服器端再用 RSA 的私鑰將資料解密還原成原本的 RC4 產生的鑰匙.note: 看到這你或許會覺得奇怪,為何不用非對稱式的公鑰來做全程的加解密.第一因為非對稱加密的演算法很消耗 CPU 的資源所以不適合大量的資料的加解密,但是對稱式的鑰匙卻很適合大量的資料的加解密,但是他無法直接使用網路上來傳送,因為有可能被擷取,所以對稱式鑰匙被非對稱式的公鑰包在一起,傳送到伺服器端期間,只有伺服器有非對稱式的私鑰能解開.所以能很安全的傳給伺服器.之後的 SSL 連線中都會使用這對稱式的鑰匙加解密.
  3. 這樣看似安全其實不然,因為使用者無法確定伺服器端的真假(經過假的 DNS Server 使用者可能被導向假的伺服器端),所以使用 CA(Certification Authority) 來進行伺服器端的身份確認.因此伺服器端不只會單給 public key 還會加上數位簽名的憑證.而這東西的內容如下.
    Certificate:
    Data:
    Version: 1 (0×0)
    Serial Number: 1 (0×1)
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: C=TW, ST=Taiwan, L=Taipei, O=Verisign, OU=IT,CN=www.verisign.com/emailAddress=admin@verisign.com
    Validity
    Not Before: Feb  9 14:19:35 2004 GMT
    Not After : Feb  6 14:19:35 2014 GMT
    Subject: C=TW, ST=Taipei, L=Taiwan, O=TDC, OU=SIT,CN=www.tdc.com/emailAddress=admin@tdc.com
     Subject Public Key Info:
    Public Key Algorithm: rsaEncryption
                RSA Public Key: (2048 bit)
    Modulus (2048 bit):
    00:a8:03:0f:27:3e:52:b6:e7:33:ab:8d:c2:39:13:
    ……………………………..略…………………………………………..
    9e:7b:cc:e1:b5:82:c0:1a:65:27:af:c4:26:01:bf:
    9b:5f
    Exponent: 65537 (0×10001)
    Signature Algorithm: sha1WithRSAEncryption
            a2:76:86:13:b9:42:ee:2b:80:bd:19:70:8f:7f:54:39:ce:00:
    ……………………………..略…………………………………………..
    7c:a7:00:a3:e1:f8:f9:e4:01:ab:c7:ff:15:fe:d5:fc:b9:33:
    c0:b9:82:5f
    

    可以看到的他的內容包括下列的東西
    第一部分是憑證的內容包括一些是誰簽發給誰的到期日等資訊.
    第二部分是伺服器端的 Public Key
    第三部分是上一層 CA 在簽發憑證時,將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
    因為這一段訊息摘要是用上一層 CA 的 Private Key 加密,所以使用者端必先要匯入他的 Public Key,後面的範例會再說明.
    note:關於數位簽名請參考 PKI (Public Key Infrastructure)

  4. 使用者端接到這 public key 加上數位簽名的憑證,會先去檢查資料是否遭到修改.
    方法如下:
    I. 一開始決定用哪些方法加解密的 ,資料訊息包括這些 Signature Algorithm: sha1WithRSAEncryption (這裡是用 SHA1 加上 RSA)
    II.先用對方的上一層的公鑰將資料解密.
    III.再將第一二部分的資料做出 SHA1 的訊息摘要
    IV.比對兩個訊息摘要是否相同,相同則表示訊息未被修改.
    V.這時候就可以確定伺服器端身份.
  5. 然後使用者會產生對稱式鑰匙,並將他得到伺服器端的 Public Key 來加密,等到伺服器端使用者端都有鑰匙後,就使用這鑰匙來進行接下來的交易.

Step2:網頁伺服器與遊覽器之間的 SSL 實際範例
我們先用瀏覽器來看看網頁伺服器加上 SSL 的用戶端是怎麼運作的,先打開瀏覽器去看中國信託的網站 http://www.chinatrust.com.tw/ 並且登入他的網路銀行 ,你會看到如下圖所示:
ssl00
首先你會看到 http 變成 https ,表示就是 http 使用了 SSL ,而它使用的 port 為 443
ssl013
你還會看到瀏覽器的右下方多了一個鑰使形狀的東西,把它點兩下,就會完整看到 SSL 的相關訊息
ssl020
這裡是與公私鑰相關的資訊.
ssl03
這邊會看到與 CA (Certification Authority)相關的資料.
ssl04
至於我們的瀏覽器(Explorer or Mozilla….)跟網頁伺服器(IIS or Apache…)之間是怎麼運作的說明如下:

當使用者上網時要和網頁伺服器以 SSL 進行溝通時,網頁伺服器會給使用者他的公鑰,這把鑰匙和私鑰為一對,以公鑰的加密的資料只有私鑰能解開.但是此時使用者卻不能確定中國信託的這把公鑰的真假.因為網站也有可能被假冒,所以要經過公正的第三者 CA(Certification Authority)來確定這鑰匙的真假.
微軟的遊覽器 IE 預設上就已經幫我們設定了一些公正的 CA(Certification Authority),我們可以透過 IE 的工具/網際網路選項/內容/憑證/信任的根憑證授權,如下圖所示:
ssl06
你會看到好幾個 CA 其中的一個 VeriSign 就是發給中國信託的 CA ,他只檢查數位簽章,經過一番的確認後使用者就會傳送一把對稱式的鑰匙給網頁伺服器,當然這鑰匙也經過網頁伺服器的公鑰加密才傳送出去的.之後的交易都會透過這一把鑰匙的加解密來傳送.
每個環節都必須正確才能讓 SSL 的交易進行下去.其中的 CA 佔有很大的部分.當遊覽器遇到不認識的網頁公鑰.這時遊覽器就會讓使用者來決定是否相信這把公鑰的正確性.你會看到如下圖所示:
ssl07
解決方式請參考 http with ssl (還沒寫)

發表迴響