Tunnel SSL

SSL(secure socket layer,安全通道層)
用於http的port為443
由Netscape Communications開發
用來對網際網路session提供安全性和保密性的handshake協定

原理:
加密資料(使用非對稱加密)  
1.server端將憑證中的publick key給客戶端
2.客戶端用該public key將訊息加密給server端
3.server端將加密資料用private key解密
ps:server端發出的public key每一段時間會改變
驗證server(使用不可否認性技術)  
1.客戶端會去看server端憑證的簽發單位可靠性
2.若確定可靠則瀏覽器會顯示安全,若不確定則瀏覽器會顯示”這個網站不安全” 

功能
支援伺服器和客戶端認證,並被設計成協商加密金鑰及在交換任何資料之前認證伺服器。使用加密、認證和MAC來維護傳輸信道的完整性
建置於Socket層,應用在傳輸層,主要功能是建立安全的連線,以憑證為主的驗證
利用tcp來提供點對點安全服務,支援應用層協定ex;http,ftp,smtp.ssh

SSL connection:一個連結表一個傳輸程序,點對點的暫時關係,並對應到SSL session
  伺服端與客戶端亂數:對每個連結所選取的位元組序列
  由伺服端寫入mac秘密:對送出資料產生mac用的秘鑰
  由客戶端寫入mac秘密:對送出資料產生mac用的秘鑰
  伺服端寫入鑰匙:給客戶端用來解密的key
  客戶端寫入鑰匙:給伺服端用來解密的key
  啟始向量:初始值由握手協定設定
  序號:對不同連結發出/接收的訊號

SSL session:介於兩端間有不同狀態,由handshake(握手協定)產生,並定義一組能被多連結共享的安全參數
  通訊識別碼:伺服端選一位元組序列辨識通訊狀態
  對等認證:X509v3對通訊雙方的認證
  壓縮方法:加密前的壓縮演算法
  密文規格:指定加密演算法
  主要秘密:定義客戶端與伺服端共享秘密48byte
  是否可回覆:表可否用這個通訊建立新連結

SSL由兩層協定組成:
高層協定(管理ssl通訊)
 handshake protocol(握手協定):1byte類型type(有十種)+3byte長度length+1byte以上content(內容)
  傳送資料前須用此協定讓用戶端和伺服器確任彼此身份,並讓雙方選加密演算法,mac演算法,相關金鑰  
 change cipher spec protocol(密文規格變更協定):訊息只含1byte
  讓pending state(隨後狀態)能夠複製到current state(目前狀態)中,即可更新目前連線所用加密演算法
 alert protocol(警告協定):1byte警戒等級level+1byte警訊代碼alter,可用來傳送相關警訊給連線對方
  level的值有warning(1,不產生任何新連線)和fatal(2,馬上中斷)
tcp上層
 SSL record protocol(記錄協定):提供基本安全服務讓高層協定使用
 保密性:握手協定定義一把傳統加密法的共享秘密鑰匙
 訊息完整性:握手協定定義一把產生訊息確認碼的共享秘密鑰匙

ssl 記錄協定運作流程
1切割:會將上層欲傳送的訊息(ex:http,handshake協定,alter協定..等高層協定)切割最多2^14位元組
2壓縮:無損失壓縮,選擇性
3加入MAC:計算訊息認證碼並加入在片段後,SSLv3使用HMAC
4加密:可使用
  區塊加密:IDEA-128key,RC2-40key,DES-40key,DES-56key,3DES-168key,Fortezza-80key
  串流加密:RC4-40key,RC4-128key
5加入ssl header
  content type(資料類型):8bit,用來處理這個切割區塊的上層協定
  major version(主要版本號碼):8bit,使用ssl協定的主要版本號碼,sslv3是3
  minor version(次要版本號碼):8bit,使用的次要版本號碼,sslv3是0
  compressed length(壓縮後的資料長度):16bit區塊位元長度,最大值是2^14+2048

SSL交握協定運作流程
第一階段:Hello Phase(問候階段)
第二階段:Key Exchange(金鑰交換)
第三階段:Session Key Production(製造交談金鑰)
第四階段:Server Verify(伺服器驗證)
第五階段:Client Authentication(用戶鑑別)
第六階段:Finished Phase(完成階段)

…………………

OpenSSL
開放原始碼的SSL套件,其函式庫是以C語言所寫成,實作了基本的傳輸層資料加密功能。
雖然此軟體是開放原始碼的,但因為其授權書條款與GPL有衝突之處,因此並不是自由軟體。
提供了一個普通的密碼庫,就象SSLv2/SSLv3,和TLSv1網絡安全協議
除了是個library外,還提供了CLI(command line interface)操作,可透過openssl這隻程式對檔案加密解密