IOS-https自簽名證書(shū)雙向認(rèn)證

文章結(jié)構(gòu)


  1. https協(xié)議
  2. 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)加密。

  1. 對(duì)稱(chēng)加密
    速度高,可加密內(nèi)容較大,用來(lái)加密會(huì)話過(guò)程中的消息
  2. 公鑰加密
    加密速度較慢,但能提供更好的身份認(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原理詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容