OpenSSL
兩臺主機之間怎樣進行安全的數據傳輸呢?
ssl/TLS 是什麼?爲什麼可以實現數據的加密傳輸?
ssl/TLS是安全的套接字層,在應用層和傳輸層又虛擬了一個層,當http封裝完後傳輸給TCP層時候,調用SSL層來對數據進行加密
什麼是openssl?
openssl 是SSL的開源的實現。它有三部分構成。
libcrypto:加密庫(不通信時候可以單純加密本地數據)
libssl (ssl/TLS的實現。基於會話的、實現身份認證、數據機密性和會話完整性的ssl/TLS庫)openssl 多用途的命令行工具
***類型: 威脅保密性的***:竊聽、通信量分析; 威脅完整性的***:更改、僞裝、重放、否認 威脅可用性的***:拒絕服務(DoS) 解決方案: 技術(加密和解密)、 服務(用於抵禦***的服務,也即是爲了上述安全目標而特地設計的安全服務) 服務: 認證機制 、訪問控制機制
密鑰算法和協議
對稱加密
特性:
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後,計算生成本次會話所有到的“會話密鑰”;
向客戶端發送如下信息:
編碼變更通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;