iOS 用免費證書來適配HTTPS

  1. 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的話,即服務器使用其他可信任機構頒發的證書,也可以建立連接,這個非常危險,建議打開。
    //置為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;      
    
  2. 雙向認證:請參考鏈接:http://www.lxweimin.com/p/9e573607be13

  3. 常見錯誤:


    MM_yt_1.png
    MM_yt_1.png

    錯誤碼: "failure = Error Domain=NSURLErrorDomain Code=-999",斷點跟蹤發現,


    MM_yt_2.png
    MM_yt_2.png

    // 這是因為證書的問題,證書多加密了一層BASE64加密
  4. 解決辦法:右鍵用文本編輯軟件打開就能看到


    MM_yt_3.png
    MM_yt_3.png

    MM_yt_4.png
    MM_yt_4.png

    第一種方法:把證書里面的字符串復制出來,然后解BASE64后再轉Data。

    NSData *cerData = [[NSData alloc] initWithBase64EncodedString:httpsKEY options:0];
    

注意:要把如下內容去掉只保留中間的字符串
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
第二種方法:用mac系統的字符串工具把證書導入進來,然后再導出成cer,這個cer就可以直接使用.
// 雙擊cer文件,在鑰匙串中找到該證書

//
MM_yt_7.png
MM_yt_7.png

// 然后直接導出即可
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容