Подтвердить что ты не робот

iOS 11: ATS (App Transport Security) больше не принимает пользовательские сертификаты привязки?

Я сдаю в аренду самозаверяющий сертификат с использованием 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://

Как я могу заставить это работать с настраиваемым сертификатом, но без необходимости устанавливать сертификаты или белый список домена?

4b9b3361