iOS開發(fā)AFN配置HTTPS的SSL證書

原定于2017年1月1日起所有提交到 App Store 的App必須強(qiáng)制開啟 ATS姐仅,需要配置Https花枫。但是現(xiàn)在不需要了,無固定期限的往后延期了掏膏,但是這個(gè)還是得弄明白下為好劳翰,說不定哪天突然就讓弄了。
一馒疹、 2017年1月1日起所有提交到 App Store 的App必須強(qiáng)制開啟 ATS佳簸。
就是要求去掉 Info.plist 的 NSAllowsArbitraryLoads
1.這要求所有通過APP發(fā)送的網(wǎng)絡(luò)請(qǐng)求都需要https

2.開啟ATS,圖片(例如圖像的URL)等靜態(tài)文件的url需要用https行冰,否則會(huì)無法加載溺蕉;

3.對(duì)于H5伶丐,網(wǎng)頁瀏覽和視頻播放的行為,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent 鍵疯特。通過將它設(shè)置為 YES 哗魂,
可以讓你的 app 中的 WKWebView 和使用 AVFoundation 播放的在線視頻不受 ATS 的限制。
這也應(yīng)該是絕大多數(shù)使用了相關(guān)特性的 app 的選擇漓雅。但是壞消息是這個(gè)鍵在 iOS 9 中并不會(huì)起作用.

4.iOS9中可以選擇使用 NSExceptionDomains 來針對(duì)特定的域名開放 HTTP 應(yīng)該要相對(duì)容易過審核录别。“需要訪問的域名是第三方服務(wù)器邻吞,他們沒有進(jìn)行 HTTPS 對(duì)應(yīng)”會(huì)是審核時(shí)的一個(gè)可選理由组题,但是這應(yīng)該只需要針對(duì)特定域名,而非全面開放抱冷。如果訪問的是自己的服務(wù)器的話崔列,可能這個(gè)理由會(huì)無法通過。是需要在Info.plist 配置中的XML源碼

 <key>NSAppTransportSecurity</key>  
 <dict>  
     <key>NSExceptionDomains</key>  
     <dict>  
         <key>XXX.com</key>  
         <dict>  
             <!--適用于這個(gè)特定域名下的所有子域-->  
             <key>NSIncludesSubdomains</key>  
             <true/>  
             <!--擴(kuò)展可接受的密碼列表:這個(gè)域名可以使用不支持 forward secrecy 協(xié)議的密碼-->  
             <key>NSExceptionRequiresForwardSecrecy</key>  
             <false/>  
             <!--允許App進(jìn)行不安全的HTTP請(qǐng)求-->  
             <key>NSExceptionAllowsInsecureHTTPLoads</key>  
             <true/>  
             <!--在這里聲明所支持的 TLS 最低版本-->  
             <key>NSExceptionMinimumTLSVersion</key>  
             <string>TLSv1.1</string>  
         </dict>  
     </dict>  
 </dict>  

二旺遮、 目前項(xiàng)目中用到的第三方已經(jīng)支持https的有

WKWebView  
UIWebView  
SDWebImage  
 支付寶SDK  
 微信支付SDK  
 友盟SDK  
 極光推送SDK  
其中用到的UIWebView 以后要逐步替換為WKWebView 

上面內(nèi)容參考于:http://blog.csdn.net/zhangmengleiblog/article/details/53536956

三赵讯、下面是在AFN中配置實(shí)例:

+ (AFSecurityPolicy*)customSecurityPolicy
{
// /先導(dǎo)入證書
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"hgcang" ofType:@"cer"];//證書的路徑
NSData *certData = [NSData dataWithContentsOfFile:cerPath];

// AFSSLPinningModeCertificate 使用證書驗(yàn)證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

// allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認(rèn)為NO
// 如果是需要驗(yàn)證自建證書耿眉,需要設(shè)置為YES
securityPolicy.allowInvalidCertificates = YES;

//validatesDomainName 是否需要驗(yàn)證域名边翼,默認(rèn)為YES;
//假如證書的域名與你請(qǐng)求的域名不一致鸣剪,需把該項(xiàng)設(shè)置為NO组底;如設(shè)成NO的話,即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書筐骇,也可以建立連接债鸡,這個(gè)非常危險(xiǎn),建議打開拥褂。
//置為NO娘锁,主要用于這種情況:客戶端請(qǐng)求的是子域名牙寞,而證書上的是另外一個(gè)域名饺鹃。因?yàn)镾SL證書上的域名是獨(dú)立的,假如證書上注冊(cè)的域名是www.google.com间雀,那么mail.google.com是無法驗(yàn)證通過的悔详;當(dāng)然,有錢可以注冊(cè)通配符的域名*.google.com惹挟,但這個(gè)還是比較貴的茄螃。
//如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯连锯。
securityPolicy.validatesDomainName = NO;

securityPolicy.pinnedCertificates = @[certData];

return securityPolicy;
}

將上面的方法添加到我們AFN請(qǐng)求數(shù)據(jù)中

+ (void)post:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
    // 1.獲得請(qǐng)求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    // 2.申明返回的結(jié)果是text/html類型
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

// 加上這行代碼归苍,https ssl 驗(yàn)證用狱。
//[mgr setSecurityPolicy:[self customSecurityPolicy]];

// 3.發(fā)送POST請(qǐng)求
[mgr POST:url parameters:params
  success:^(AFHTTPRequestOperation *operation, id responseObj) {
      if (success) {
          success(responseObj);
      }
  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      if (failure) {
          failure(error);
      }
  }];
}

上面參考于 http://blog.csdn.net/canlanyangg/article/details/53559597 這篇文章。
四.關(guān)于證書 參考文章:http://www.2cto.com/Article/201510/444706.html
服務(wù)端給的是crt后綴的證書拼弃,其中iOS客戶端用到的cer證書夏伊,是需要開發(fā)人員轉(zhuǎn)換:
1.證書轉(zhuǎn)換
在服務(wù)器人員,給你發(fā)送的crt證書后吻氧,進(jìn)到證書路徑溺忧,執(zhí)行下面語句

openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der

這樣你就可以得到cer類型的證書了。雙擊盯孙,導(dǎo)入電腦鲁森。
2.證書放入工程
1、可以直接把轉(zhuǎn)換好的cer文件拖動(dòng)到工程中振惰。
2歌溉、可以在鑰匙串內(nèi),找到你導(dǎo)入的證書骑晶,單擊右鍵研底,導(dǎo)出項(xiàng)目,就可以導(dǎo)出.cer文件的證書了

參考鏈接:http://www.reibang.com/p/97745be81d64透罢。

五.在info.plist去掉之前允許http加載的代碼 就是刪除下面的代碼(么有的就省了這一步)

<key>NSAppTransportSecurity</key>  
<dict>  
<key>NSAllowsArbitraryLoads</key>  
<true/>  
</dict>  

六榜晦、可能出現(xiàn)的問題:
6.1服務(wù)器可能出現(xiàn)的問題:

Error Domain=NSURLErrorDomain Code=-1200 "發(fā)生了 SSL 錯(cuò)誤,無法建立與該服務(wù)器的安全連接羽圃。" UserInfo=    {NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef:     0x15dd87140>, NSLocalizedRecoverySuggestion=您仍要連接此服務(wù)器嗎乾胶?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, NSErrorPeerCertificateChainKey=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}, NSUnderlyingError=0x15dd5f770 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x15dd87140>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}}}, NSLocalizedDescription=發(fā)生了 SSL 錯(cuò)誤,無法建立與該服務(wù)器的安全連接朽寞。, NSErrorFailingURLKey=https://192.168.1.138/app/login/login.json, NSErrorFailingURLStringKey=https://192.168.1.138/app/login/login.json, NSErrorClientCertificateStateKey=0}

可能是服務(wù)器配置的證書不對(duì)识窿,蘋果要求是TLS1.2,服務(wù)端配置是TLS1.0脑融。
也有可能是后臺(tái)簽名算法問題 https://my.oschina.net/vimfung/blog/494687
6.2喻频、證書一定要拉到項(xiàng)目里面,AFN加了驗(yàn)證之后肘迎,看看獲取證書的certData是否為空甥温。如果為空,則證書有問題

NSData *certData = [NSData dataWithContentsOfFile:cerPath];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妓布,一起剝皮案震驚了整個(gè)濱河市姻蚓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匣沼,老刑警劉巖狰挡,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡加叁,警方通過查閱死者的電腦和手機(jī)倦沧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來它匕,“玉大人刀脏,你說我怎么就攤上這事〕剩” “怎么了愈污?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)轮傍。 經(jīng)常有香客問我暂雹,道長(zhǎng),這世上最難降的妖魔是什么创夜? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任杭跪,我火速辦了婚禮,結(jié)果婚禮上驰吓,老公的妹妹穿的比我還像新娘涧尿。我一直安慰自己,他們只是感情好檬贰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布姑廉。 她就那樣靜靜地躺著,像睡著了一般翁涤。 火紅的嫁衣襯著肌膚如雪桥言。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天葵礼,我揣著相機(jī)與錄音号阿,去河邊找鬼。 笑死鸳粉,一個(gè)胖子當(dāng)著我的面吹牛扔涧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播届谈,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枯夜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疼约?” 一聲冷哼從身側(cè)響起卤档,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蝙泼,失蹤者是張志新(化名)和其女友劉穎程剥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡织鲸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年舔腾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搂擦。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稳诚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瀑踢,到底是詐尸還是另有隱情扳还,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布橱夭,位于F島的核電站氨距,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棘劣。R本人自食惡果不足惜俏让,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茬暇。 院中可真熱鬧首昔,春花似錦、人聲如沸糙俗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巧骚。三九已至撬陵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間网缝,已是汗流浹背巨税。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粉臊,地道東北人草添。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像扼仲,于是被迫代替她去往敵國和親远寸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • SSL/TLS協(xié)議運(yùn)行機(jī)制的概述:http://blog.csdn.net/xiaofei125145/artic...
    zfl1024閱讀 2,256評(píng)論 0 5
  • 一屠凶、簡(jiǎn)單談?wù)凙TS(App Transport Security) ATS(App Transport Secur...
    JW_T閱讀 3,739評(píng)論 0 5
  • 今天算是被逼著去看了這部電影驰后,可以這么說:) 今早看到一張圖,前面說去看這部電影的人都是垃圾矗愧,發(fā)圖人挺有趣的灶芝,...
    九月不是我閱讀 988評(píng)論 13 8
  • 虛度了的一天,去積水潭看望了腿兒,看她康復(fù)訓(xùn)練的痛苦神情真的好難受夜涕,希望她快點(diǎn)好起來犯犁。 抄概率論作...
    鹽味廢柴閱讀 157評(píng)論 0 0
  • 1驾胆,當(dāng)我假寬恕的時(shí)候我…… 2涣澡,我常常假寬恕的是…… 3,這樣的表情丧诺,或這樣的你在什么時(shí)候?qū)φl有過暑塑。 當(dāng)我假寬恕的...
    兮兮AX閱讀 198評(píng)論 0 0