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