NSURLSession“ HTTP加载失败kCFStreamErrorDomainSSL,-9813;自签名证书

2020/12/16 11:32 · ios ·  · 0评论

我试图将我的iOS应用程序连接到当前在网络中的本地主机上运行的HTTPS Rails应用程序。我可以通过浏览器https://myIP:3000/display以及通过curl请求在命令行中访问该站点我正在尝试使用以下方式从我的应用程序访问它:

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //let url = NSURL(string: "https://another/Sinatra/website/feed")
        let url = NSURL(string: "https://myIP:3000/display")

        let request = NSURLRequest(URL: url!)
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!)
        task!.resume()
    }

当我尝试访问sinatra网站时,我没有遇到任何麻烦,甚至可以使用正确的命令将JSON打印到控制台。但是,当我将URL设置到Rails网站时,出现以下错误。

NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

另外,我可以说我的本地主机Rails应用程序(在另一台计算机上)不是从iOS应用程序执行ping操作,而是从浏览器和curl命令执行ping操作。

任何想法如何解决这一问题?

如果我了解得很清楚,Apple现在希望开发人员使用HTTPS和TLS 1.2进行网络呼叫。

临时的,您可以将其添加到“ Info.plist”文件中:

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

只是看看这个链接,它可能也对您有帮助:http : //ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

-

更新:经过评论后,以上解决方案不再起作用。这是更新的解决方案。

  1. 转到您的Info.plist文件。
  2. 添加一行Type DictionaryKey App Transport Security Settings
  3. 在此字典中,添加Type BooleanKey Allow Arbitrary LoadsValue的行 YES

--

否则您可以设置Domain Exceptions这是怎么做的:

  1. 转到您的Info.plist文件。
  2. 添加一行Type DictionaryKey App Transport Security Settings
  3. 添加一行Type DictionaryKey Exception Domains
  4. 添加一行Type DictionaryKey The domain
  5. 将两行Type BooleanKey NSExceptionAllowsInsecureHTTPLoadsNSIncludesSubdomainswith Value添加到中YES

链接

https://forums.developer.apple.com/message/5857#5857

2015年WWDC会议711

iOS 9 HTTP连接错误-StackOverflow

这是一个信任问题。使用自签名证书,SSL的身份验证组件不起作用。仍然可以建立安全的连接,以便没有人在窃听,但是应用程序无法确定谁在线路的另一端。

我有一个类似的设置,并通过将我的自签名根CA添加到iPad可信证书中解决了此问题。该根CA用于签署我的所有其他开发证书。然后,我只需要在将使用SSL的任何地方添加此单个根证书即可。如果您只有直接使用的自签名证书,则可以添加它。

要将证书获取到设备(或模拟器)上,我将文件放在Web服务器上。然后,只需通过Safari在纯HTTP上打开它即可。设置应用程序应打开,并询问您是否要信任证书。

当然,这是假设这仅用于开发,并且您的生产系统具有由知名机构签名的证书(即,操作系统的根证书颁发机构数据库中包含的证书)。因为要求最终用户安装您的自签名证书不会成功。

这是唯一对我有用的解决方案...在AppDelegate.m文件的末尾,插入代码:

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

感谢jc ivancevich的文章http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/

(编辑-我误读为9814,证书已过期。我不确定如何解决此问题,但希望我的回答有助于指出正确的方向。)

看起来是一个证书问题,与通常的“允许任意加载”问题不同。

摘录自:Apple文档-附录A:常见服务器信任评估错误

NSOSStatusErrorDomain errSSLNoRootCert -9813

尝试更改会话变量,此更改对我有帮助

let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

修改info.plist也对我有用。

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

NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

在您的plist文件中添加新行。在此处输入图片说明

本文地址:http://ios.askforanswer.com/nsurlsession-httpjiazaishibaikcfstreamerrordomainssl-9813ziqianmingzhengshu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!