文章結(jié)構(gòu)
- https協(xié)議
- AFNetWorking 實(shí)現(xiàn)雙向認(rèn)證
一、https協(xié)議
1.1 Http與Https區(qū)別
1.1.1 Http
HyperText Transfer Protocol,超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上使用最廣泛的一種協(xié)議,所有WWW文件必須遵循的標(biāo)準(zhǔn)。HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全。
使用TCP端口為:80
1.1.2 Https
Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本傳輸協(xié)議,網(wǎng)景公式設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對(duì)Http協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,保證會(huì)話過(guò)程中的安全性。
使用TCP端口默認(rèn)為443
1.2 SSL協(xié)議加密方式
SSL協(xié)議即用到了對(duì)稱(chēng)加密也用到了非對(duì)稱(chēng)加密(公鑰加密),在建立傳輸鏈路時(shí),SSL首先對(duì)對(duì)稱(chēng)加密的密鑰使用公鑰進(jìn)行非對(duì)稱(chēng)加密,鏈路建立好之后,SSL對(duì)傳輸內(nèi)容使用對(duì)稱(chēng)加密。
- 對(duì)稱(chēng)加密
速度高,可加密內(nèi)容較大,用來(lái)加密會(huì)話過(guò)程中的消息- 公鑰加密
加密速度較慢,但能提供更好的身份認(rèn)證技術(shù),用來(lái)加密對(duì)稱(chēng)加密的密鑰
1.3 單向認(rèn)證與雙向認(rèn)證
1.3.1 單向認(rèn)證
Https在建立Socket連接之前,需要進(jìn)行握手,具體過(guò)程如下:

1. 客戶端向服務(wù)端發(fā)送SSL協(xié)議版本號(hào)、加密算法種類(lèi)、隨機(jī)數(shù)等信息。
2. 服務(wù)端給客戶端返回SSL協(xié)議版本號(hào)、加密算法種類(lèi)、隨機(jī)數(shù)等信息,同時(shí)也返回服務(wù)器端的證書(shū),即公鑰證書(shū)
3. 客戶端使用服務(wù)端返回的信息驗(yàn)證服務(wù)器的合法性,包括:
* 證書(shū)是否過(guò)期
* 發(fā)型服務(wù)器證書(shū)的CA是否可靠
* 返回的公鑰是否能正確解開(kāi)返回證書(shū)中的數(shù)字簽名
* 服務(wù)器證書(shū)上的域名是否和服務(wù)器的實(shí)際域名相匹配
驗(yàn)證通過(guò)后,將繼續(xù)進(jìn)行通信,否則,終止通信
4. 客戶端向服務(wù)端發(fā)送自己所能支持的對(duì)稱(chēng)加密方案,供服務(wù)器端進(jìn)行選擇
5. 服務(wù)器端在客戶端提供的加密方案中選擇加密程度最高的加密方式。
6. 服務(wù)器將選擇好的加密方案通過(guò)明文方式返回給客戶端
7. 客戶端接收到服務(wù)端返回的加密方式后,使用該加密方式生成產(chǎn)生隨機(jī)碼,用作通信過(guò)程中對(duì)稱(chēng)加密的密鑰,使用服務(wù)端返回的公鑰進(jìn)行加密,將加密后的隨機(jī)碼發(fā)送至服務(wù)器
8. 服務(wù)器收到客戶端返回的加密信息后,使用自己的私鑰進(jìn)行解密,獲取對(duì)稱(chēng)加密密鑰。
在接下來(lái)的會(huì)話中,服務(wù)器和客戶端將會(huì)使用該密碼進(jìn)行對(duì)稱(chēng)加密,保證通信過(guò)程中信息的安全。
1.3.1 雙向認(rèn)證
雙向認(rèn)證和單向認(rèn)證原理基本差不多,只是除了客戶端需要認(rèn)證服務(wù)端以外,增加了服務(wù)端對(duì)客戶端的認(rèn)證,具體過(guò)程如下:

1. 客戶端向服務(wù)端發(fā)送SSL協(xié)議版本號(hào)、加密算法種類(lèi)、隨機(jī)數(shù)等信息。
2. 服務(wù)端給客戶端返回SSL協(xié)議版本號(hào)、加密算法種類(lèi)、隨機(jī)數(shù)等信息,同時(shí)也返回服務(wù)器端的證書(shū),即公鑰證書(shū)
3. 客戶端使用服務(wù)端返回的信息驗(yàn)證服務(wù)器的合法性,包括:
* 證書(shū)是否過(guò)期
* 發(fā)型服務(wù)器證書(shū)的CA是否可靠
* 返回的公鑰是否能正確解開(kāi)返回證書(shū)中的數(shù)字簽名
* 服務(wù)器證書(shū)上的域名是否和服務(wù)器的實(shí)際域名相匹配
驗(yàn)證通過(guò)后,將繼續(xù)進(jìn)行通信,否則,終止通信
4. 服務(wù)端要求客戶端發(fā)送客戶端的證書(shū),客戶端會(huì)將自己的證書(shū)發(fā)送至服務(wù)端
5. 驗(yàn)證客戶端的證書(shū),通過(guò)驗(yàn)證后,會(huì)獲得客戶端的公鑰
6. 客戶端向服務(wù)端發(fā)送自己所能支持的對(duì)稱(chēng)加密方案,供服務(wù)器端進(jìn)行選擇
7. 服務(wù)器端在客戶端提供的加密方案中選擇加密程度最高的加密方式
8. 將加密方案通過(guò)使用之前獲取到的公鑰進(jìn)行加密,返回給客戶端
9. 客戶端收到服務(wù)端返回的加密方案密文后,使用自己的私鑰進(jìn)行解密,獲取具體加密方式,而后,產(chǎn)生該加密方式的隨機(jī)碼,用作加密過(guò)程中的密鑰,使用之前從服務(wù)端證書(shū)中獲取到的公鑰進(jìn)行加密后,發(fā)送給服務(wù)端
10. 服務(wù)端收到客戶端發(fā)送的消息后,使用自己的私鑰進(jìn)行解密,獲取對(duì)稱(chēng)加密的密鑰,在接下來(lái)的會(huì)話中,服務(wù)器和客戶端將會(huì)使用該密碼進(jìn)行對(duì)稱(chēng)加密,保證通信過(guò)程中信息的安全。
參考文獻(xiàn):
官方說(shuō)明:
HTTPS Hypertext Transfer Protocol (HTTP/1.1): Authentication
雙向認(rèn)證 Mutual Authentication Protocol for HTTP
SSL Profiles Part 8: Client Authentication
One Way and Two Way SSL and TLS
Mutual Authentication
CA證書(shū)掃盲,https講解。
Https單向認(rèn)證和雙向認(rèn)證
AFNetworking 3.0與服務(wù)端 自簽名證書(shū) https雙向認(rèn)證
正確使用AFNetworking的SSL保證網(wǎng)絡(luò)安全
OPENSSL生成SSL自簽證書(shū)
Setting up OpenSSL to Create Certificates
那些證書(shū)相關(guān)的玩意兒(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
Nginx配置https雙向認(rèn)證
CA證書(shū)
SSL/TLS原理詳解