OpenSSL
兩台主機之間怎樣進行安全的資料傳輸呢?
ssl/TLS 是什麼?為什麼可以實作資料的加密傳輸?
ssl/TLS是安全的套接字層,在應用層和傳輸層又虛拟了一個層,當http封裝完後傳輸給TCP層時候,調用SSL層來對資料進行加密
什麼是openssl?
openssl 是SSL的開源的實作。它有三部分構成。
libcrypto:加密庫(不通信時候可以單純加密本地資料)
libssl (ssl/TLS的實作。基于會話的、實作身份認證、資料機密性和會話完整性的ssl/TLS庫)openssl 多用途的指令行工具
密鑰算法和協定
對稱加密
特性:
1、加密、解密使用同一個密鑰;
2、将原始資料分割成為固定大小的塊,逐個進行加密; 注:可以保證資料的機密性
缺陷:
1、密鑰過多;
2、密鑰分發困難;
算法:3DES,AES,Blowfish
公鑰加密 密鑰分為公鑰與私鑰
特點:用公鑰加密的資料,隻能使用與之配對兒的私鑰解密;反之亦然;
用途:數字簽名:主要在于讓接收方确認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
資料加密
算法:RSA(主要用于密鑰交換,也可簽名,也可以加密和解密資料), DSA(隻能用于簽名), ELGamal
單向加密
特性:定長輸出、雪崩效應;提出資料指紋;隻能加密,不能解密;
算法:md5: 128bits sha1 160bits sha224, sha256, sha384, sha512
你知道怎樣保證密鑰傳輸的安全性?密鑰交換: IKE
公鑰加密RSA(使用對方的公鑰加密) 缺點是:在網上傳輸了
Diffie-Hellman(密碼不在網上傳輸)
A和B傳輸資料如何保證資料機密性、完整性、身份驗證的呢? 如下圖

1、同理B收到資料後,用自己的私鑰解密,得到對稱密鑰。
2、然後用對稱密碼解密整個資料,保證了資料的機密性。B用A的公鑰能夠解密資料特征碼,可以驗證資料來自于A。
3、B再次用單向加密算法就算出資料特征碼進行比對,如果一樣表示資料沒有改動,驗證了資料的完整性。
為什麼要用到pki?
PKI: 公鑰基礎設施:可以用來驗證資料來源的合法性
組成: 簽證機構:CA
注冊機構:RA
證書吊銷清單:CRL
證書存取庫:
SSL會話主要三步:
用戶端向伺服器端索要并驗正證書;
雙方協商生成“會話密鑰”;
雙方采用“會話密鑰”進行加密通信;
如圖:
client server
A-----------------------------------B
------->hello
hello <---------------
驗證證書,公鑰加密随機數--------->
B計算所有的随機密鑰,生成一個對稱密鑰
服務端握手結束通知
SSL Handshake Protocol:
第一階段:ClientHello:
支援的協定版本,比如tls 1.2;
用戶端生成一個随機數,稍後使用者生成“會話密鑰”
支援的加密算法,比如AES、3DES、RSA;
支援的壓縮算法;
第二階段:ServerHello
确認使用的加密通信協定版本,比如tls 1.2;
伺服器端生成一個随機數,稍後用于生成“會話密鑰”
确認使用的加密方法;
伺服器證書;
第三階段:
驗正伺服器證書,在确認無誤後取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷清單)
發送以下資訊給伺服器端:一個随機數;
編碼變更通知,表示随後的資訊都将用雙方商定的加密方法和密鑰發送;
用戶端握手結束通知;
第四階段:
收到用戶端發來的第三個随機數pre-master-key後,計算生成本次會話所有到的“會話密鑰”;
向用戶端發送如下資訊:
服務端握手結束通知;