我正在尝试使用Swift.But中的NSURLSessionDownloadDelegate
下载文件。当我调用下载方法时,它经常显示以下错误。
错误Domain = NSURLErrorDomain Code = -1202“操作无法完成。(NSURLErrorDomain错误-1202。)”UserInfo = 0x7fbac2dd2f60 {NSErrorFailingURLStringKey = https://dl.dropboxusercontent.com/content_link/EvFVp1WYxrW15Vy6kfUGIChdHy4HVhatT0p6iQhhG24wzNsQ48CEDs0shjmTbCWb/file?dl=1,NSErrorFailingURLKey = https://dl.dropboxusercontent.com/content_link/EvFVp1WYxrW15Vy6kfUGIChdHy4HVhatT0p6iQhhG24wzNsQ48CEDs0shjmTbCWb/file?dl=1,NSURLErrorFailingURLPeerTrustErrorKey = ,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9813,NSUnderlyingError = 0x7fbac2ca07e0“操作无法完成。(kCFErrorDomainCFNetwork error -1202。)”}
我尝试编辑info.plist但它无效。
答案 0 :(得分:0)
您是否为ATS
(Apple Transport Security)添加了任意加载,例如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
请注意,这是不安全的,您可能希望按域自定义ATS规则,如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>dl.dropboxusercontent.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
[UPDATE] 如果我们更好地看错误,我们可以看到关键
<强> NSURLErrorFailingURLPeerTrustErrorKey 强>
然后Apple关于HTTPS Server Trust Evaluation的技术说明可能有所帮助。 继续我们阅读的文档
Domain = NSURLErrorDomain Code = -1202&#34;此服务器的证书是 无效。您可能正在连接到假装的服务器 “example.com”可能会使您的机密信息面临风险。&#34; UserInfo = 0x14a730 {NSErrorFailingURLStringKey = https://example.com/, NSLocalizedRecoverySuggestion =您想要连接到服务器吗? 无论如何?,NSErrorFailingURLKey = https://example.com/, NSLocalizedDescription =此服务器的证书无效。您 可能连接到假装是“example.com”的服务器 这可能会使您的机密信息面临风险。, NSUnderlyingError = 0x14a6c0&#34;此服务器的证书是 无效。您可能正在连接到假装的服务器 “example.com”可能会使您的机密信息面临风险。&#34;, NSURLErrorFailingURLPeerTrustErrorKey =}
嗯,那个很漂亮,因为NSURLErrorDomain域中的 -1202 错误是 NSURLErrorServerCertificateUntrusted ,因为TSL存在可能的问题。
所以我们需要检查TSL:
我们通过CLI检查证书:
$ openssl s_client -showcerts -host dl.dropboxusercontent.com -port 443
CONNECTED(00000003)
depth=2 /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/OU=Domain Control Validated/CN=dl.dropboxusercontent.com
i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
---
Server certificate
subject=/OU=Domain Control Validated/CN=dl.dropboxusercontent.com
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
---
No client certificate CA names sent
---
SSL handshake has read 4569 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: 50414926328455F36215516BEB0C40F1DD512C3C0989E0C090DC9277E754B35EFF0CE3AEA4D3FB524FFE071BE2D4426C
Key-Arg : None
Start Time: 1447281208
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
closed
我们可以看到此域名支持 TLSv1 / SSLv3,
我们可以使用SSL质量实验室的SSL服务器测试在线进行此操作,并获得相同的良好结果here。
我不知道这个问题是否与A couple users getting NSURLErrorServerCertificateUntrusted重复 但是通过上面的TSL检查我们可以清楚地看到有问题的域名是正确的。
所以(简单)问题
您的手机时间和日期是否正确?