Я сдаю в аренду самозаверяющий сертификат с использованием NSMutableURLRequest
, и когда сертификат привязывается с помощью пользовательского сертификата с SecTrustSetAnchorCertificates
, IOS 11
завершается сбоем со следующим сообщением об ошибке:
refreshPreferences: HangTracerEnabled: 1
refreshPreferences: HangTracerDuration: 500
refreshPreferences: ActivationLoggingEnabled: 0 ActivationLoggingTaskedOffByDA:0
ATS failed system trust
System Trust failed for [1:0x1c417dc40]
TIC SSL Trust Error [1:0x1c417dc40]: 3:0
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Task <721D712D-FDBD-4F52-8C9F-EEEA28104E73>.<1> HTTP load failed (error code: -1200 [3:-9802])
Task <721D712D-FDBD-4F52-8C9F-EEEA28104E73>.<1> finished with error - code: -1200
То, что раньше работало для IOS 10
, больше не работает в IOS 11
.
Мне известно, что IOS 11
больше не поддерживает следующее:
- RC4 3DES-CBC AES-CBC
- MD5 SHA-1
- & lt; 2048-битные ключи публикации RSA - все соединения TLS с серверами
- http://
- SSLv3
- TLS 1.0
- TLS 1.1
И сертификат не использует их, за исключением одного отпечатка пальца, который является SHA-1
, но также указан fingerprint SHA-256
.
И добавив следующее, мы можем обойти ошибку ATS (App Transport Security):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
Установка корневого/якорного сертификата на сам телефон также работает без внесения в белый список mydomain.com.
Означает ли это, что ATS больше не поддерживает самозаверяющие сертификаты?
Раньше это работало в IOS 10
:
SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)certs);
Использование nscurl
на Mac показывает много сбоев, и после установки корневого сертификата в "Системное" хранилище ключей nscurl
происходит успешно.
Это было сделано на macOS 10.12.6
.
nscurl --verbose --ats-diagnostics https://
Как я могу заставить это работать с настраиваемым сертификатом, но без необходимости устанавливать сертификаты или белый список домена?