security ssl ios11 xcode9

¿iOS 11 ATS(App Transport Security) ya no acepta certificados de anclaje personalizados?



ssl ios11 (0)

Estoy arrendando un certificado autofirmado usando "NSMutableURLRequest" y cuando el certificado está anclado usando un certificado personalizado con "SecTrustSetAnchorCertificates" iOS 11 falla con el siguiente mensaje de error:

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

Lo que solía funcionar para iOS 10 ya no funciona en IO 11.

Soy consciente de que iOS 11 ya no admite lo siguiente:

  • RC4 3DES-CBC AES-CBC
  • MD5 SHA-1
  • RSA Pubs de <2048 bits: todas las conexiones TLS a los servidores
  • http: //
  • SSLv3
  • TLS 1.0
  • TLS 1.1

Y el certificado no los utiliza a excepción de una huella digital que es SHA-1, pero también se muestra una huella digital SHA-256.

Y al agregar lo siguiente, podemos omitir el error 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>

Al instalar el certificado raíz / ancla en el teléfono, también funciona sin la necesidad de incluir en la lista blanca de mydomain.com.

¿Significa esto que ATS ya no admite certificados autofirmados?

Esto solía funcionar en iOS 10:

SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)certs);

El uso de nscurl en una Mac muestra muchas fallas y después de instalar el certificado raíz en el "Sistema" nscurl correctamente. Esto se hizo en macOS 10.12.6.

nscurl --verbose --ats-diagnostics https://

¿Cómo puedo hacer que esto funcione con un certificado personalizado, pero sin la necesidad de instalar certificados o incluir en la lista blanca el dominio?