1. https 與 http
https (Hyper text transfer protocol over secure socket layer), 帶安全套接層(SSL)的 http. 能夠建立一個信息安全通道, 保證數(shù)據(jù)傳輸安全, 可以通過 CA 證書來查詢網(wǎng)站認(rèn)證后的真實(shí)信息.可以理解為:?HTTP+SSL/TLS
????超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協(xié)議不適合傳輸一些敏感信息,比如信用卡號、密碼等。為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩琀TTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書來驗(yàn)證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。
????HTTPS和HTTP的區(qū)別主要為以下四點(diǎn):
一、https協(xié)議需要到ca申請證書,一般免費(fèi)證書很少,需要交費(fèi)。
二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。
三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
????SSL(Secure Sockets Layer 安全套接層), 及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層對網(wǎng)絡(luò)連接進(jìn)行加密。
????SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層:SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
SSL協(xié)議提供的服務(wù)主要有哪些
1)認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器 (冒充風(fēng)險)
2)加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取 (?竊聽風(fēng)險)
3)維護(hù)數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中不被改變 (篡改風(fēng)險)。
SSL協(xié)議的工作流程服務(wù)器認(rèn)證階段:
1)客戶端向服務(wù)器發(fā)送一個開始信息“Hello”以便開始一個新的會話連接;
2)服務(wù)器根據(jù)客戶的信息確定是否需要生成新的主密鑰,如需要則服務(wù)器在響應(yīng)客戶的“Hello”信息時將包含生成主密鑰所需的信息;
3)客戶根據(jù)收到的服務(wù)器響應(yīng)信息,產(chǎn)生一個主密鑰,并用服務(wù)器的公開密鑰加密后傳給服務(wù)器;
4)服務(wù)器恢復(fù)該主密鑰,并返回給客戶一個用主密鑰認(rèn)證的信息,以此讓客戶認(rèn)證服務(wù)器。
用戶認(rèn)證階段
在此之前,服務(wù)器已經(jīng)通過了客戶認(rèn)證,這一階段主要完成對客戶的認(rèn)證。經(jīng)認(rèn)證的服務(wù)器發(fā)送一個提問給客戶,客戶則返回(數(shù)字)簽名后的提問和其公開密鑰,從而向服務(wù)器提供認(rèn)證。
????SSL證書種類CFCA,GlobalSign,VeriSign ,Geotrust ,Thawte 。
域名型 https 證書(DVSSL):信任等級一般,只需驗(yàn)證網(wǎng)站的真實(shí)性便可頒發(fā)證書保護(hù)網(wǎng)站;
企業(yè)型 https 證書(OVSSL):信任等級強(qiáng),須要驗(yàn)證企業(yè)的身份,審核嚴(yán)格,安全性更高;
增強(qiáng)型 https 證書(EVSSL):信任等級最高,一般用于銀行證券等金融機(jī)構(gòu),審核嚴(yán)格,安全性最高,同時可以激活綠色網(wǎng)址欄。
2. 配置證書
2.1 將. cer 證書導(dǎo)入項(xiàng)目;
可以在鑰匙串內(nèi),找到你導(dǎo)入的證書,單擊右鍵,導(dǎo)出項(xiàng)目,就可以導(dǎo)出.cer文件的證書了
2.2 設(shè)置 plist 中 transportSecurity
<key>NSAppTransportSecurity </key>
?????<dict>
? ? ? ? <key>NSAllowsArbitraryLoads</key>
? ? ? ? ?<true/>
????? </dict>
2.3 配置 AFN
支持https(校驗(yàn)證書,不可以抓包):
// 1.初始化 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.SSLPinningMode = AFSSLPinningModeCertificate;
// 2.設(shè)置證書模式
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
// 客戶端是否信任非法證書
mgr.securityPolicy.allowInvalidCertificates = YES;
// 是否在證書域字段中驗(yàn)證域名
[mgr.securityPolicy setValidatesDomainName:NO];
支持https(不校驗(yàn)證書,可以抓包查看):
// 1.初始化 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.設(shè)置非校驗(yàn)證書模式 manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; manager.securityPolicy.allowInvalidCertificates = YES;
[manager.securityPolicy setValidatesDomainName:NO];