- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我知道 ATS 的东西以及如何编辑 info.plist 以允许 HTTP。但是,URL 是 https://api.map.baidu.com/api?v=2 . 0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1,这是一个 HTTPS 请求,但我仍然得到
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
然后我在 didFinishLaunchingWithOptions
中添加 setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
以启用详细日志。
在日志中,我找到错误日志:
5510 Jan 14 10:52:01 MCompass[8549] <Notice>: CFNetwork Diagnostics [3:363] 10:52:01.458 {
5511 Response Error
5512 Request: <CFURLRequest 0x7fecf3cddcb0 [0x10aff37b0]> {url = https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1, cs = 0x0}
5513 Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7fecf406bbf0>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7fecf406cda0 [0x10aff37b0]>{type = immutable, count = 3, values = (
5514 0 : <cert(0x7fecf3fa80e0) s: baidu.com i: VeriSign Class 3 International Server CA - G3>
5515 1 : <cert(0x7fecf3fa8920) s: VeriSign Class 3 International Server CA - G3 i: VeriSign Class 3 Public Primary Certification Authority - G5>
5516 2 : <cert(0x7fecf4069fd0) s: VeriSign Class 3 Public Primary Certification Authority - G5 i: Class 3 Public Primary Certification Authority>
5517 )}}
5518 } [3:363]
5519 Jan 14 10:52:01 MCompass[8549] <Notice>: CFNetwork Diagnostics [3:364] 10:52:01.459 {
5520 Did Fail
5521 Loader: <CFMutableURLRequest 0x7fecf3cdd9f0 [0x10aff37b0]> {url = https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1, cs = 0x0}
5522 Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7fecf406bbf0>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7fecf406cda0 [0x10aff37b0]>{type = immutable, count = 3, values = (
5523 0 : <cert(0x7fecf3fa80e0) s: baidu.com i: VeriSign Class 3 International Server CA - G3>
5524 1 : <cert(0x7fecf3fa8920) s: VeriSign Class 3 International Server CA - G3 i: VeriSign Class 3 Public Primary Certification Authority - G5>
5525 2 : <cert(0x7fecf4069fd0) s: VeriSign Class 3 Public Primary Certification Authority - G5 i: Class 3 Public Primary Certification Authority>
5526 )}}
5527 init to origin load: 0.00280595s
5528 total time: 0.447458s
5529 total bytes: 0
5530 } [3:364]
我很困惑,因为它是 HTTPS 请求,但仍然有问题。我在 Chrome 上尝试了 URL,它返回了一个有效的证书(我有像 X509 这样的证书知识)。但无法弄清楚为什么它被阻止。
有人可以帮忙吗?预先感谢。将此域添加到 ATS 异常(exception)中会有所帮助,但我不想添加它,因为它已经是 HTTPS 了!
更新:
运行
/usr/bin/nscurl --ats-diagnostics -v "https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1"
将返回全部通过:
Xuans-MacBook-Pro:~ xuan$ /usr/bin/nscurl --ats-diagnostics -v "https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1"
Starting ATS Diagnostics
Configuring ATS Info.plist keys and displaying the result of HTTPS loads to https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ&s=1.
A test will "PASS" if URLSession:task:didCompleteWithError: returns a nil error.
================================================================================
Default ATS Secure Connection
---
ATS Default Connection
ATS Dictionary:
{
}
Result : PASS
---
================================================================================
Allowing Arbitrary Loads
---
Allow All Loads
ATS Dictionary:
{
NSAllowsArbitraryLoads = true;
}
Result : PASS
---
================================================================================
Configuring TLS exceptions for api.map.baidu.com
---
TLSv1.2
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.2";
};
};
}
Result : PASS
---
---
TLSv1.1
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.1";
};
};
}
Result : PASS
---
---
TLSv1.0
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.0";
};
};
}
Result : PASS
---
================================================================================
Configuring PFS exceptions for api.map.baidu.com
---
Disabling Perfect Forward Secrecy
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
================================================================================
Configuring PFS exceptions and allowing insecure HTTP for api.map.baidu.com
---
Disabling Perfect Forward Secrecy and Allowing Insecure HTTP
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionAllowsInsecureHTTPLoads = true;
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
================================================================================
Configuring TLS exceptions with PFS disabled for api.map.baidu.com
---
TLSv1.2 with PFS disabled
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.2";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
---
TLSv1.1 with PFS disabled
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.1";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
---
TLSv1.0 with PFS disabled
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionMinimumTLSVersion = "TLSv1.0";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
================================================================================
Configuring TLS exceptions with PFS disabled and insecure HTTP allowed for api.map.baidu.com
---
TLSv1.2 with PFS disabled and insecure HTTP allowed
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionAllowsInsecureHTTPLoads = true;
NSExceptionMinimumTLSVersion = "TLSv1.2";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
---
TLSv1.1 with PFS disabled and insecure HTTP allowed
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionAllowsInsecureHTTPLoads = true;
NSExceptionMinimumTLSVersion = "TLSv1.1";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
---
TLSv1.0 with PFS disabled and insecure HTTP allowed
ATS Dictionary:
{
NSExceptionDomains = {
"api.map.baidu.com" = {
NSExceptionAllowsInsecureHTTPLoads = true;
NSExceptionMinimumTLSVersion = "TLSv1.0";
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Result : PASS
---
================================================================================
最佳答案
正如在 this answer 上讨论的那样,通过简单地通过 HTTPS 访问您的 API url 并不意味着它将符合 Apple 的 ATS。我也使用 nscurl
,但我认为该工具还不够成熟,有时效率可能很低。
SSL Labs恕我直言,测试要好得多,而且详细。它将帮助您找出 SSL 配置中缺少的内容。
注意 ATS requires最低 TLS 1.2 和完美前向保密密码套件。
关于ios - kCFStreamErrorDomainSSL -9802 错误但它是 HTTPS URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781036/
我正在尝试从 webview 加载 php 脚本,但每次都出现错误。 NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9
我正在尝试调试一个进行大量 HTTP 调用的应用程序。我在控制台看到这个: 2015-09-08 17:21:01.458 MyApp[3186:3064431] NSURLSession/NSURL
您运行此代码: let URL = "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg" let imageData =
你运行这段代码: let URL = "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg" let imageData
我正在使用 Alamofire 向服务器发送请求,但收到以下错误: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomai
当连接到客户端的服务器时,我收到(kCFStreamErrorDomainSSL, -9813)。 客户端的服务器有一个我无法更改的自签名证书。该应用程序使用 AFNetworking 3.x。我尝试
尝试从 Twitter 加载图像文件时,我间歇性地出现此错误,URL 如下:https://pbs.twimg.com/media/Ck-9Oc6XIAAIb8B.jpg 针对 ios8 并在两个 i
调用第三方库时,出现如下问题。 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) Error
iOS9.3 xcode7.3.1我想使用 WebView 访问 HTTPS 站点,出现错误(kCFStreamErrorDomainSSL, -9843) NSMutableURLRequest*
所以我知道 ATS 的东西以及如何编辑 info.plist 以允许 HTTP。但是,URL 是 https://api.map.baidu.com/api?v=2 . 0&ak=1XjLLEhZhQ
在模拟器上运行应用程序时,我在 iOS 9 上收到 NSURLSession/NSURLConnection HTTP 加载失败。这是我的 info.plist 文件的样子 NSAppTranspor
在模拟器上运行应用程序时,我在 iOS 9 上收到 NSURLSession/NSURLConnection HTTP 加载失败。这是我的 info.plist 文件的样子 NSAppTranspor
我正在尝试将具有自签名证书的 HTTPS 网页加载到 UIWebView 中。使用类似 this one 的提示, 或 this one ,它在 iOS 6 下工作。同样在 iOS 7 中不起作用。
我尝试在 Swift 中使用 NSURLSessionDownloadDelegate 下载文件。但是当我调用下载方法时,它经常显示以下错误。 Error Domain=NSURLErrorDomai
因此,我尝试了搜索此问题时出现的解决方案中提到的修复,但在 Visual Studio 上,我的 iOS Web View 项目仍然遇到这些问题。 android 版本工作正常,但 iOS 无法正常加
我现在正在测试环境中试用我的应用程序,该应用程序具有在 web View 中打开 URL 的功能,但现在测试时,生产数据库中的文件 URL 来自亚马逊并具有以下格式: self.url = @"htt
我正在尝试使用 Alamofire 从我的服务器访问数据。我已尝试以所有可能的方式编辑 info.plist,但无法从链接“https://plus.livectlab.com//users_vide
每当我尝试向我们的服务器发出请求时,我都会收到此错误。在我们设置 SSL 之前它工作正常,不是一团糟..这是我的代码: // Setup URL POST Request.. NSString*
我想在 Web View 中加载我的 Url,它向我显示错误,如 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomain
我收到错误:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802),我怀疑这是因为从 Parse 查询图像。这是我查
我是一名优秀的程序员,十分优秀!