ios訪問https介面
A. 關於iOS配置https
1.https簡單說明
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。
即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。
https: URL表明它使用了HTTP,但HTTPS存在不同於HTTP的默認埠及一個加密/身份驗證層(在HTTP與殲穗TCP之間)。
2.HTTPS和HTTP的區別主要為以下宏告四點:
一、https協議需要到ca申請證書,一般免費證書很少,需要交費。
二、http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協蔽改明議。
三、http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
四、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
3.簡單說明
1)HTTPS的主要思想是在不安全的網路上創建一安全信道,並可在使用適當的加密包和伺服器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的保護。
2)HTTPS的信任繼承基於預先安裝在瀏覽器中的證書頒發機構(如VeriSign、Microsoft等)(意即「我信任證書頒發機構告訴我應該信任的」)。
3)因此,一個到某網站的HTTPS連接可被信任,如果伺服器搭建自己的https 也就是說採用自認證的方式來建立https信道,這樣一般在客戶端是不被信任的。
4)所以我們一般在瀏覽器訪問一些https站點的時候會有一個提示,問你是否繼續。
4.關於.pem轉換為.cer
1)如果後台給你的公鑰是.pem文件的話,你需要將它轉換為.cer的文件,並將它導入你項目的bundle
里,在終端里轉換的命令如下:
openssl x509 -in <你的伺服器證書>.pem -outform der -out server.cer
2)關於Afn 3.0請求數據配置;
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
manager.responseSerializer =[AFHTTPResponseSerializer serializer];
manager.requestSerializer =[AFHTTPRequestSerializer serializer];
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的證書" ofType:@"cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
NSSet *cerSet = [[NSSet alloc] initWithObjects:cerData, nil];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
[securityPolicy setAllowInvalidCertificates:YES];
[securityPolicy setPinnedCertificates:cerSet];
securityPolicy.validatesDomainName = NO;
3)關於info.plist的配置:
1.在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設為no:
4)關於https載入http的網頁:
1.在其內添加一個Key: Exception Domains,類型為Dictionary;
2.在Exception Domains內添加要支持的域,其中域作為Key,類型為Dictionary;
3.每個域下面需要設置3個屬性:類型為Boolean;
NSIncludesSubdomains YES
NO
YES
如圖所示: