iOS 11: ATS (App Transport Security) accepteert geen aangepaste ankercertificaten meer?

Ik lease een zelfondertekend certificaat met behulp van NSMutableURLRequesten wanneer het certificaat is verankerd met een aangepast certificaat met SecTrustSetAnchorCertificatesIOS 11mislukt met de volgende foutmelding:

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

Wat vroeger werkte voor IOS 10werkt niet meer in IOS 11.

Ik ben me ervan bewust dat IOS 11het volgende niet langer ondersteunt:

  • RC4 3DES-CBC AES-CBC
  • MD5 SHA-1
  • <2048-bit RSA Pub Keys – Alle TLS-verbindingen met servers
  • http://
  • SSLv3
  • TLS 1.0
  • TLS 1.1

En het certificaat gebruikt deze niet, behalve één vingerafdruk, namelijk SHA-1, maar er wordt ook een SHA-256-vingerafdruk vermeld.

En door het volgende toe te voegen, kunnen we de ATS-fout (App Transport Security) omzeilen:

<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>

Door het root-/ankercertificaat op de telefoon zelf te installeren, werkt het ook zonder de noodzaak om mijndomein.com op de witte lijst te zetten.

Betekent dit dat ATS zelfondertekende certificaten niet langer ondersteunt?

Het volgende werkte in IOS 10:

SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)certs);

Het gebruik van nscurlop een Mac vertoont veel fouten, en na het installeren van het rootcertificaat in de “System” Keystore, slaagt nscurl.
Ik deed dit op macOS 10.12.6.

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

Hoe kan ik dit laten werken met een aangepast certificaat, maar zonder dat ik certificaten hoef te installeren of het domein op de witte lijst moet zetten?


Antwoord 1, autoriteit 100%

Enige tijd geleden begon macOS met het afdwingen van een vereiste dat CA-certificaten niet ook kunnen worden gebruikt als eindentiteitscertificaten (bijv. webserver). Is het mogelijk dat iOS deze vereiste tussen 10 en 11 heeft toegevoegd?

Als dat zo is, is de tijdelijke oplossing eenvoudig: u maakt uw zelfondertekende CA-certificaat en gebruikt dat certificaat om het webservercertificaat uit te geven. Het CA-certificaat (basicConstraints: CA=True) is het vertrouwensanker dat in uw truststore hoort; het eindentiteitscertificaat (laat basicConstraints weg; extendedKeyUsage=serverAuth) wordt gepresenteerd door de webserver. Je mag alleen niet meer exact hetzelfde certificaat voor beide gebruiken.

(Dit zou een reactie moeten zijn, maar ik heb nog niet genoeg punten om te reageren.)

Other episodes