今天早上把之前了解到的一些常見加密方法給簡單總結(jié)了一下,今天晚上抽一點(diǎn)時(shí)間再來總結(jié)一些常見的身份、數(shù)據(jù)安全協(xié)議總結(jié)吧。
- HTTPS協(xié)議
- OAuth2 協(xié)議
- SSH 協(xié)議
1.HTTPS協(xié)議
簡單理解,HTTPS協(xié)議就是由HTTP over SSL,即HTTP協(xié)議的上層還有一個(gè)SSL(Security Socket Layer)協(xié)議層,最后兩者組合形成HTTPS層。
** 注:TLS是SSL在3.0版本之后的名字,TLS針對(duì)SSL的許多缺點(diǎn)進(jìn)行了改進(jìn)**
SSL/TLS實(shí)現(xiàn)的基本過程:
- 客戶端向服務(wù)器索要并驗(yàn)證公鑰。
- 雙方協(xié)商生成"對(duì)話密鑰"。
- 雙方采用"對(duì)話密鑰"進(jìn)行加密通信。
其中1,2過程稱之為握手階段,3過程稱之為正式加密通信階段
首先來了解一下握手階段在客戶端和服務(wù)器之間到底發(fā)生了哪些事情:
客戶端發(fā)起加密通信的請(qǐng)求,這被叫做ClientHello請(qǐng)求??蛻舳颂峁┮韵滦畔ⅲ?/p>
支持的協(xié)議版本,比如TLS 1.0版。
一個(gè)客戶端生成的隨機(jī)數(shù),稍后用于生成"對(duì)話密鑰"。
支持的加密方法,比如RSA公鑰加密。
支持的壓縮方法。
服務(wù)器收到客戶端請(qǐng)求后,向客戶端發(fā)出回應(yīng),這叫做SeverHello。服務(wù)器的回應(yīng)包含以下內(nèi)容:
確認(rèn)使用的加密通信協(xié)議版本,比如TLS 1.0版本。如果瀏覽器與服務(wù)器支持的版本不一致,服務(wù)器關(guān)閉加密通信。
一個(gè)服務(wù)器生成的隨機(jī)數(shù),稍后用于生成"對(duì)話密鑰"。
確認(rèn)使用的加密方法,比如RSA公鑰加密。
服務(wù)器證書。
客戶端收到服務(wù)器回應(yīng)以后,首先驗(yàn)證服務(wù)器證書。如果證書不是可信機(jī)構(gòu)頒布、或者證書中的域名與實(shí)際域名不一致、或者證書已經(jīng)過期,就會(huì)向訪問者顯示一個(gè)警告,由其選擇是否還要繼續(xù)通信。如果證書沒有問題,客戶端就會(huì)從證書中取出服務(wù)器的公鑰。然后,向服務(wù)器發(fā)送下面三項(xiàng)信息:
一個(gè)隨機(jī)數(shù)。該隨機(jī)數(shù)用服務(wù)器公鑰加密,防止被竊聽。
編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值,用來供服務(wù)器校驗(yàn)。
服務(wù)器收到客戶端的第三個(gè)隨機(jī)數(shù)pre-master key之后,計(jì)算生成本次會(huì)話所用的"會(huì)話密鑰"。然后,向客戶端最后發(fā)送下面信息:
編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值,用來供客戶端校驗(yàn)。
2. OAuth2協(xié)議
什么是OAuth2協(xié)議?
An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.
一句話,OAuth2協(xié)議是一個(gè)安全驗(yàn)證協(xié)議,不僅應(yīng)用在Web端,也可以在移動(dòng)端、桌面應(yīng)用等。
OAuth2模型:了解在OAuth2中涉及到的幾個(gè)角色:
- Third-party application:第三方應(yīng)用程序,又稱"客戶端"(client)。
- HTTP service:HTTP服務(wù)提供商。
- Resource Owner:資源所有者,又稱"用戶"(user)。
- User Agent:用戶代理,常指瀏覽器
- Authorization server:認(rèn)證服務(wù)器,即服務(wù)提供商專門用來處理認(rèn)證的服務(wù)器。
- Resource server:資源服務(wù)器,即服務(wù)提供商存放用戶生成的資源的服務(wù)器。它與認(rèn)證服務(wù)器,可以是同一臺(tái)服務(wù)器,也可以是不同的服務(wù)器。
點(diǎn)擊查看OAuth2應(yīng)用的一個(gè)具體場景
OAuth2實(shí)現(xiàn)的一個(gè)大致過程如下圖:

上邊這幅圖總結(jié)一下其實(shí)就四個(gè)步驟:
- 獲取用戶授權(quán)(比如通過Web UI)
- 向服務(wù)器提交用戶授權(quán)
- 獲取授權(quán)許可之后的令牌(token)
- 利用令牌來訪問受保護(hù)的資源
OAuth2實(shí)現(xiàn)的具體過程:

上邊這幅圖其實(shí)是對(duì)上邊第2、3步的一個(gè)細(xì)化。首先客戶(即User-Agent)與服務(wù)器交互,確定向該第三方系統(tǒng)(即圖中的Client)授權(quán),然后服務(wù)器會(huì)返回一個(gè)Authorization Code授權(quán)碼,然后第三方系統(tǒng)(即圖中的Client)再利用這個(gè)授權(quán)碼去獲取到一個(gè)Access Token訪問令牌。最后第三方系統(tǒng)拿著這個(gè)令牌去訪問系統(tǒng)上的一些資源。
另外,在這個(gè)過程中還有一個(gè)比較有意思的點(diǎn):為什么先需要一個(gè)Authorization Code再去獲取一個(gè)Access Token,為什么不直接獲取到一個(gè)Access Token,這樣多省事高效。其實(shí)這與客戶端(即User-Agent的安全性有關(guān)),具體是怎么回事,點(diǎn)擊這里查看
3. SSH協(xié)議
SSH(Secure Shell)是一個(gè)提供數(shù)據(jù)通信安全、遠(yuǎn)程登錄、遠(yuǎn)程指令執(zhí)行等功能的安全網(wǎng)絡(luò)協(xié)議,由芬蘭赫爾辛基大學(xué)研究員Tatu Yl?nen,于1995年提出,其目的是用于替代非安全的Telnet、rsh、rexec等遠(yuǎn)程Shell協(xié)議。之后SSH發(fā)展了兩個(gè)大版本SSH-1和SSH-2。
SSH的主要特性:
- 加密:避免數(shù)據(jù)內(nèi)容泄漏
通信的完整性:避免數(shù)據(jù)被篡改,以及發(fā)送或接受地址偽裝
(檢查數(shù)據(jù)是否被篡改,數(shù)據(jù)是否來自發(fā)送者而非攻擊者) SSH-2通過MD5和SHA-1實(shí)現(xiàn)該功能,SSH-1使用CRC-32 - 認(rèn)證:識(shí)別數(shù)據(jù)發(fā)送者和接收者身份 客戶端驗(yàn)證SSH服務(wù)端的身份:防止攻擊者仿冒SSH服務(wù)端身份,避免中介人攻擊和重定向請(qǐng)求的攻擊;OpenSSH通過在know-hosts中存儲(chǔ)主機(jī)名和host key對(duì)服務(wù)端身份進(jìn)行認(rèn)證 服務(wù)端驗(yàn)證請(qǐng)求者身份:提供安全性較弱的用戶密碼方式,和安全性更強(qiáng)的per-user public-key signatures;此外SSH還支持與第三方安全服務(wù)系統(tǒng)的集成,如Kerberos等
- 授權(quán):用戶訪問控制
- Forwarding or tunneling to encrypt other TCP/IP-based sessions 可以通過SSH為Telnet、FTP等提供通信安全保障,支持三種類型的Forwarding操作:Port Forwarding;X Forwarding;Agent Forwarding
點(diǎn)擊這里查看SSH的實(shí)現(xiàn)過程