-
iOS單向驗證
//先導入證書,找到證書的路徑 NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"證書名" ofType:@"cer"]; NSData *cerData = [NSData dataWithContentsOfFile:cerPath]; //AFSSLPinningModeCertificate 使用證書驗證模式 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; //allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認為NO //如果是需要驗證自建證書够庙,需要設置為YES securityPolicy.allowInvalidCertificates = YES; //validatesDomainName 是否需要驗證域名棘脐,默認為YES蚌讼; //假如證書的域名與你請求的域名不一致,需把該項設置為NO哈垢;如設成NO的話早龟,即服務器使用其他可信任機構頒發(fā)的證書鸵赖,也可以建立連接,這個非常危險拄衰,建議打開。 //置為NO饵骨,主要用于這種情況:客戶端請求的是子域名翘悉,而證書上的是另外一個域名。因為SSL證書上的域名是獨立的居触,假如證書上注冊的域名是www.google.com妖混,那么mail.google.com是無法驗證通過的;當然轮洋,有錢可以注冊通配符的域名*.google.com制市,但這個還是比較貴的。 //如置為NO弊予,建議自己添加對應域名的校驗邏輯祥楣。 securityPolicy.validatesDomainName = NO; NSSet *set = [[NSSet alloc] initWithObjects:cerData, nil]; securityPolicy.pinnedCertificates = set; //在AFN設置上securityPolicy AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.securityPolicy = securityPolicy;
雙向認證:請參考鏈接:http://www.reibang.com/p/9e573607be13
-
常見錯誤:
錯誤碼: "failure = Error Domain=NSURLErrorDomain Code=-999",斷點跟蹤發(fā)現(xiàn),
// 這是因為證書的問題,證書多加密了一層BASE64加密 -
解決辦法:右鍵用文本編輯軟件打開就能看到
第一種方法:把證書里面的字符串復制出來,然后解BASE64后再轉Data误褪。
NSData *cerData = [[NSData alloc] initWithBase64EncodedString:httpsKEY options:0];
注意:要把如下內容去掉只保留中間的字符串
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
第二種方法:用mac系統(tǒng)的字符串工具把證書導入進來责鳍,然后再導出成cer,這個cer就可以直接使用.
// 雙擊cer文件,在鑰匙串中找到該證書
// 然后直接導出即可