
Ich habe die gegenseitige TLS 1.2-Authentifizierung auf Apache 2.4.54 mit einer selbstsignierten Zertifizierungsstelle und Testclients auf iOS und MacOS am Laufen. Alles funktioniert, außer dass die Clients die „akzeptable Client-Zertifikat-Zertifizierungsstelle“ in der Zertifikatsanforderung nicht erkennen, sodass Benutzer/App wissen müssen, welche sie auswählen sollen. Auf meiner iOS-App ist das URLAuthenticationChallenge.protectionSpace.distinguishedNames
Feld, das diese Liste liefern soll, leer. Auf MacOS Safari wird der Benutzer aufgefordert, ein Zertifikat aus allen installierten auszuwählen, obwohl nur 1 die richtige ausstellende Zertifizierungsstelle hat. Mit
openssl s_client -connect myserver.com:443 -prexit
kehrt zurück
Acceptable client certificate CA names
/C=US/ST=x/L=x/O=x/OU=x/CN=myca.com/emailAddress=x
Die relevante Apache-Konfiguration sieht so aus.
SSLCACertificateFile /etc/pki/CA/cacert.pem
SSLCADNRequestFile /etc/pki/CA/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 1
Ich erhalte dasselbe Ergebnis ohne SSLCADNRequestFile
. Wenn ich mir die Apache-Protokolle ansehe, LogLevel trace8
scheint der korrekte Distinguished Name in der CertificateRequest-Datei zu erscheinen. Dies ist ein Rohdump, daher kann ich die Binärfelder nicht lesen, aber ich kann den richtigen ASCII-Wert für meinen CA CN sehen. Ich vermute, dass iOS/MacOS diese Daten sehen, aber entscheiden, dass sie nicht verwendbar sind.
Das CA-Zertifikat hat X509v3 Basic Constraints: CA:TRUE
, aber keine keyUsage-Spezifikationen. Da die Authentifizierung funktioniert, gehe ich davon aus, dass das Zertifikat in Ordnung ist, solange der Client das richtige Zertifikat wählt.
Irgendwelche Ideen, was ich falsch mache oder wie ich das Problem weiter beheben kann?
Antwort1
Ich habe mich geirrt. Die Liste der zulässigen CAs wird an meine iOS-App übermittelt (unabhängig davon, ob ich die SSLCADNRequestFile einschließe oder nicht). Zu Beginn der Verbindung gibt es zwei App-Rückrufe, und beim zweiten wird die DER-codierte CA-Liste übermittelt. Ich muss noch herausfinden, warum MacOS Safari mir die Möglichkeit gegeben hat, Zertifikate mit der falschen CA auszuwählen, aber zumindest wird die Liste übermittelt.