Я пытаюсь включить флаг NSRequiresCertificateTransparency
из приложения Transport Security для моего приложения ios для обеспечения лучшей безопасности. Я тестировал, и он отлично работает на моем устройстве с iOS 10 и в симуляторе с iOS 10. Но это приводит к сбоям https в симуляторе с iOS 9.3. Если я просто отключу этот конкретный флаг, он снова станет работать.NSRequiresCertificateTransparency = YES делает сбой https в симуляторе iOS 9
Проблема не в сервере, к которому я подключаюсь, потому что я смог воспроизвести его даже с www.apple.com. Вот настройки из Info.plist, которые я использую:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.apple.com</key>
<dict>
<key>NSRequiresCertificateTransparency</key>
<true/>
</dict>
</dict>
</dict>
А вот код:
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com/"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"fail");
}
}];
[task resume];
Ошибка Я вижу в журнале является: NSURLSession/NSURLConnection HTTP загрузка не удалась (kCFStreamErrorDomainSSL , -9802)
Возможно, это происходит только в симуляторе с iOS 9? К сожалению, у меня нет устройства с iOS 9 под рукой, чтобы проверить его.
UPDATE:
Я не вижу ничего полезного в журнале после установки CFNETWORK_DIAGNOSTICS = 3 переменной ENV. Вот часть, где он говорит об ошибке:
Response Error
Request: <CFURLRequest 0x7f8d0f668d00 [0x108314a40]> {url = https://www.apple.com/, cs = 0x0}
Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7f8d0f590a80>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7f8d0f50dfb0 [0x108314a40]>{type = immutable, count = 2, values = (
0 : <cert(0x7f8d0f66ef10) s: www.apple.com i: Symantec Class 3 EV SSL CA - G3>
1 : <cert(0x7f8d0f637e60) s: Symantec Class 3 EV SSL CA - G3 i: VeriSign Class 3 Public Primary Certification Authority - G5>
)}}
} [3:22]
Jan 31 17:09:13 test2[34612] <Notice>: CFNetwork Diagnostics [3:23] 17:09:13.125 {
Did Fail
Loader: <CFURLRequest 0x7f8d0f737670 [0x108314a40]> {url = https://www.apple.com/, cs = 0x0}
Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7f8d0f590a80>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7f8d0f50dfb0 [0x108314a40]>{type = immutable, count = 2, values = (
0 : <cert(0x7f8d0f66ef10) s: www.apple.com i: Symantec Class 3 EV SSL CA - G3>
1 : <cert(0x7f8d0f637e60) s: Symantec Class 3 EV SSL CA - G3 i: VeriSign Class 3 Public Primary Certification Authority - G5>
)}}
init to origin load: 0.00299901s
total time: 0.156503s
total bytes: 0
} [3:23]
UPDATE 2:
Вот вид объекта ошибки в отладчике.
Я вижу то же самое. –