我尝试连接到iOS 9.1上的自签名HTTPS服务器。
我正在使用:
[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
我收到错误,说明证书无效:
Error Domain=NSURLErrorDomain Code=-1202 "<French error saying the certificate is invalid"
UserInfo=
{NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x13c768140>,
NSLocalizedRecoverySuggestion=<French recovery suggestion asking if the user wants to connect anyway>, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9813, NSErrorPeerCertificateChainKey=<CFArray 0x13d82ffe0 [0x1a1242b68]>
我已经尝试添加所有可能的传输安全异常,我目前的尝试是:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.org</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
我也试过NSAllowsArbitraryLoads
,但即使这样也行不通。
我有几个.plist文件(cocoapods和测试),我认为它是正确的(App / Supporting Files / Info.plist)。
任何可能出错的想法?
答案 0 :(得分:1)
你需要像这样添加这个
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
答案 1 :(得分:0)
所以这是一个NSURLConnection问题,而不是app transport。
对于记录以及可能遇到同样问题的人,我通过调用私有方法暂时修复了它(不要这样做):
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
这不会被Apple接受。真正的解决方案是使用delegate methods,当我们处理此问题时,我会编辑此答案(我的客户是&#34;开发人员&#34;,所以我使用他的选项,他说我们&#39; ;稍后会弄明白,我们赶时间......)
答案 2 :(得分:0)