SuisseID-basierte Authentisierung mit Apple OS X

Apple veröffentliche 2006 ein Setup-Guide für die Benutzung von OS X mit Smartcards. Die Anleitung basiert auf der Version 10.4 ist somit nicht mehr aktuell. Die Prinzipien sind allerdings nach wie vor anwendbar und benötigen nur ein paar wenige Anpassungen, wie das folgende Proof-of-Concept zeigt. Es existieren drei Möglichkeiten unter OS X die Smartcard mit einem Verzeichnisdienst (lokal oder entfernt) zu assoziieren:

  • PubKeyHash
  • Attribute Matching
  • PKINIT

Im Folgenden wird das Standardvorgehen beschrieben, um eine lokale Smartcard-Authentisierung mittels PubKeyHash zu konfigurieren. Bei dieser Methode wird ein öffentlicher Schlüssel der Smartcard mit einem Benutzerkonto verknüpft. Möchte sich dieser Benutzer anmelden, dann steckt er die Smartcard ins System und gibt den korrekten PIN ein. Eine Nachricht wird dann digital mit dem Privatschlüssel signiert und mit dem öffentlichen, im System gespeicherten verifiziert. Dadurch kann, analog zur Authentisierung via SSH, die eindeutige Zuordnung vom Inhaber der SuisseID zum Benutzerkonto sichergestellt werden.

Zunächst werden die Hashes der öffentlichen Schlüssel auf der SuisseID gelistet. Dies geschieht mit dem Kommando ‘sc_auth’.

$ sc_auth hash | grep SwissSign
 AA779E7AD6DBB45AFCA48C64F1118E115DFB5604 SwissSign_nonRep
 B6EFD1C9C5DA0D4B70E18B580BD22757D53D79AA SwissSign_digSig

Anschliessend wird der Hash des Authentisierungsschlüssels dem entsprechenden Benutzer zugewiesen, in diesem Beispiel dem Benutzer namens ‘sc’:

$ sudo sc_auth accept -u sc –h B6EFD1C9C5DA0D4B70E18B580BD22757D53D79AA

Zuletzt muss das OS X-Authentisierungssystem für die Smartcard-Verwendung konfiguriert werden, in der Datei “/etc/authorization”. Am einfachsten geschieht dies mit dem PlistBuddy-Befehl:

$ sudo /usr/libexec/PlistBuddy -c "add rights:system.login.console:mechanisms:0 string builtin:smartcard-sniffer,privileged" /etc/authorization
$ sudo /usr/libexec/PlistBuddy -c "add rules:authenticate:mechanisms:0 string builtin:smartcard-sniffer,privileged" /etc/authorization

Nach den obigen Änderungen kann auf der Anmeldemaske die SuisseID eingesteckt werden. Der Dialog erkennt die Zuordnung zum Benutzer ‘sc’ und ändert das Eingabefeld von ‘Kennwort’ zu ‘PIN’. Allerdings scheitert die erfolgreiche SuisseID-Anmeldung noch. Eine Anfrage auf der entsprechenden Mailing-Liste hat zur Lösung geführt. Dem Betriebssystem muss nämlich zusätzlich die vollständige Zertifikatskette innerhalb des sogenannten System-Schlüsselbunds zur Verfügung stehen. Ein Import der Zertifikate in den Schlüsselbund “Authentisierung” ist nicht ausreichend. Sobald die Zertifikate importiert werden, funktioniert die SuisseID-basierte Authentisierung problemlos:

Schlüsselbund-Verwaltung

Abbildung: SwissSign-Zertifikatskette muss im Schlüsselbund System importiert werden

Wichtig ist zudem, dass die OpenSC-Tools nicht installiert sind resp. vorher deinstalliert werden, falls sie noch von etwaigen Tests installiert sein sollten, da sie die System-Treiber für die Smartcard-Authentisierung übersteuern, wie folgende Log-Ausgabe zeigt:

Aug 12 15:34:12 macmini.local com.apple.SecurityServer[15]: reader ACS
 ACR 38U-CCID 00 00 inserted token "SwissSignID "
 (9cde5b4dfbf9110fb3c13803a5498a1635b2e538) subservice 3 using driver com.apple.tokend.opensc

Eine Deinstallation der OpenSC-Tools erfolgt mit dem mitgelieferten Deinstallations-Script:

$ sudo /usr/local/bin/opensc-uninstall