1. 程式人生 > >iOS http轉換https網路訪問的配置

iOS http轉換https網路訪問的配置

  1. 後臺配置一個CA證書,包含域名資訊等,儲存後給前端使用,前端把cer檔案拖入工程中。(必須保證前後端使用的證書一致)
  2. info.plist 檔案中原本設定NSAllowsArbitraryLoads 設定為NO,NSAllowsArbitraryLoads若設定為YES,則表示禁用ATS功能,NO為開啟 ATS功能,預設為NO
  3. 蘋果硬性要求服務端的TLS版本必須>= 1.2
  4. 服務端配置OK後,前端把cer檔案拖入工程中,copy ,然後進行程式碼設定

如下程式碼片段:
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@”server” ofType:@”cer”];
NSData * certData =[NSData dataWithContentsOfFile:cerPath];
NSSet * certSet = [[NSSet alloc] initWithObjects:certData, nil];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 是否允許,NO– 不允許無效的證書(如果是自建證書相當於無效證書,此處若是自建證書,必須設定為YES)
[securityPolicy setAllowInvalidCertificates:YES];
// 設定證書
[securityPolicy setPinnedCertificates:certSet];
manager.securityPolicy = securityPolicy;
……..繼續執行正常AF請求即可。

我們曾遇到的問題:
1.網路請求直接失敗,錯誤資訊如下:
Error Domain=NSURLErrorDomain Code=-1200 “發生了 SSL 錯誤,無法建立與該伺服器的安全連線。” UserInfo={_kCFStreamErrorCodeKey=-9847, NSLocalizedRecoverySuggestion=您仍要連線此伺服器嗎?, NSUnderlyingError=0x7fbc09cd58c0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 “(null)” UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9847, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9847}}, NSLocalizedDescription=發生了 SSL 錯誤,無法建立與該伺服器的安全連線。, NSErrorFailingURLKey=

https://192.168.100.22:8011/interfaces/index.ashx?action=get_date_now, NSErrorFailingURLStringKey=https://192.168.100.22:8011/interfaces/index.ashx?action=get_date_now, _kCFStreamErrorDomainKey=3}

1.檢查發現是服務端的TLS版本是1.1,沒滿足1.2版本配置
2.解決方式:後臺升級TLS版本
3,執行程式,依然網路請求失敗,但不是這個錯誤了,發現證書錯誤,製作證書的時候沒加入域名地址。解決後網路正常。