搜尋

首頁  >  問答  >  主體

自己做的https证书 在iOS上请求https 报错 怎么能越过SSL证书验证

报错为 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
还有这个错误 CFNetwork SSLHandshake failed (-9824)
代码如下

  NSURL *url = [NSURL URLWithString:@"https://booking.cn.fcm.travel/img/200049324/144799957714318319/20151120140610983315.png"];
    
  UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];

  UIImageView *image1 = [[UIImageView alloc] init];
  image1.frame= CGRectMake(10, 10, 100, 100);
  image1.image=image;
    
  [self.view addSubview:image1];

下面的操作是不管用的
info.plist加上这一段,右键 info.plist -> open as -> source code
用代码加

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
黄舟黄舟2773 天前717

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-04-17 17:11:21

    買一個SSL憑證。自訂的是不會通過的,參考萬惡的12306.
    目前沃通的免費SSL無法通過Android和IOS的認證。
    用付費的吧,用最便宜的RapidSSL就行了。一年幾十塊。

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:11:21

    升級xcode7.1試試看,有個選項YES。 。 。 。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:11:21

    AppDelegate.m

    @implementation NSURLRequest(DataController)
    + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
    {
        return YES;
    }
    @end

    如果是 XCODE 7 以上的版本需要 plist 需要加上

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 17:11:21

    1.自簽名證書不被信任,可以實現conection代理,忽略證書,實現比較麻煩
    2.你的伺服器,應該是設定了只支援https請求,可以設定同時支援兩個協定

    如果是自建证书,没有经过权威机构认证的证书,那么需要将NSAllowsArbitraryLoads设置为YES才能通过。NSAllowsArbitraryLoads为YES,以前的HTTP请求也能通过。->现在是没有http协议的请求

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 17:11:21

    你可以將自簽名SSL證書替換成受瀏覽器信任的免費SSL證書,如startssl,沃通免費SSL,let us encrypt

    回覆
    0
  • 取消回覆