У меня есть приложение, которое подключается непосредственно к аппаратным маршрутизаторам. Начиная с iOS 9
Я обновил AFNetworking
и теперь получаю ssl
ошибки при попытке подключения через https
.AFNetworking необходимо обходить проверку ssl
Это не iOS 9
App Transport Security
вопрос, как я добавил соответствующую .plist
запись, чтобы обойти его и соединения работают отлично над http
.
Мне нужно обойти проверку сертификатов, поскольку каждый маршрутизатор имеет свой собственный сертификат, поэтому я, очевидно, не могу добавить сертификаты в свое приложение, так как каждый пользователь отличается.
Я использую AFHTTPRequestOperation
подкласс соединений и установить self.securityPolicy.allowInvalidCertificates = YES;
, но я получаю следующее сообщение об ошибке:
Error during connection: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9806, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSUnderlyingError=0x7fa9f3611b40 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey= https://myserver.com:4780/Info.htm , NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFNetworkCFStreamSSLErrorOriginalValue=-9806, _kCFStreamPropertySSLClientCertificateState=0, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., _kCFStreamErrorDomainKey=3, NSErrorFailingURLKey= https://myserver.com:4780/Info.htm , _kCFStreamErrorCodeKey=-9806}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey= https://myserver.com:4780/Info.htm , NSErrorFailingURLStringKey= https://myserver.com:4780/Info.htm , _kCFStreamErrorDomainKey=3}
Я также попытался добавить setWillSendRequestForAuthenticationChallengeBlock:
однако блок никогда не вызывается.
Может кто-нибудь помочь?
Благодаря
EDIT ----- Установка self.securityPolicy.validatesDomainName = NO;
также не работает. Интересно, не проблема с типом сертификата на оборудовании.
EDIT 2 ----- Вот свидетельство
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : DES-CBC3-SHA Session-ID: 010000000C6B8632215649C0665E9DCC9EC59E22F8F021672B6B50B84222A342 Session-ID-ctx: Master-Key: D71EC7D8F7A4A3581E25CDAD9C532B2C7B4DA8B513AF337095496B575F525CFBA02A40797B2D2A4F0B5911EFEFC3623F Key-Arg : None Start Time: 1443102149 Timeout : 300 (sec) Verify return code: 18 (self signed certificate)
EDIT 3 -------- Добавления этого кода в мой AFHTTPRequestOperation
подкласс делает его работу на прошивке 8, однако блок даже не вызывается на прошивке 9.
[self setWillSendRequestForAuthenticationChallengeBlock:^(NSURLConnection * _Nonnull connection, NSURLAuthenticationChallenge * _Nonnull challenge)
{
NSLog(@"**** HERE ****");
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}];
Что ATS Plist записей, которые вы добавили? – Paulw11
'NSAllowsArbitraryLoads = True' перед добавлением этого, даже с http-соединениями не удалось. Я считаю, что ATS просто заставляет http-соединения использовать https. – Darren
Хм. Этот дубликат - http://stackoverflow.com/questions/32634986/ios9-what-is-the-proper-way-to-update-afnetworking-calls-to-work-with-https-err предлагает такое же исправление, но ответ не принимается – Paulw11