Home       Servicebereich  Projekte  Kontakt  


Client-Authentifizierung mittels SSL-Zertifikat

Ein Apache mit mod_ssl ermöglicht die Public-Key Authentifizierung von Clients. Dafür wird ein CA-Zertifikat auf dem Server benötigt. Die Clients benötigen Zertifikate, die von dieser CA signiert wurden. (Diese Methode ist nur mit mod_ssl möglich. Ein apache-ssl unterstützt sie nicht)

Um eine zertifikatbasierte Authentifizierung von Clients zu realisieren, werden pkcs12 Zertifikate benötigt. Der Client erzeugt hierfür ein CSR (Certificate Sign Request) und läßt diesen von der CA signieren. Das signierte Zertifikat wird dann in ein pkcs12 Zertifikat konvertiert.

Client erzuegt CSR

    openssl req -new -keyout client-req.csr -out client-req.csr -days 365

Hier werden der Private Key sowie der CSR in das gleiche File geschrieben [kann, muß aber nicht]. Wenn mögllich sollte der Private Key getrennt vom Zertifikat gehandhabt werden und das lokale System nicht verlassen. Er wird später für die Konvertierung in das pkcs12 Format benötigt.

CA signiert den CSR

Der oben erzeugte CSR wird der CA übergeben, die diesen signiert:

    openssl ca -policy policy_anything -config private/openssl.conf \
      -out client-cert.pem -infiles client-req.csr

Das signierte Zertifikat wird danach dem Client zurückgeschickt.

Konvertierung des X509 Zertifikats in ein pkcs12 Zertifikat

Der Browser benötigt ein Zertifikat im pkcs12 Format. Dieses Format wird aus dem X509 Format mit dem Kommandoaufruf:

     openssl pkcs12 -export -in client-cert.pem -inkey client-cert.csr \
       -out client-cert.p12 -name "Martin Werthmoeller Auth Cert"
erzeugt.
Hier wird noch einmal das CSR-File benötigt, welches ja zusätzlich den diesem Zertifikat zugeordneten Private Key enthält.

Installation des pkcs12 Zertifikats im Browser

Das pkcs12 Zertifikat wird an den Client übermitttelt. Dieser importiert das Zertifikat in den Browser. Die Importfunktion liegt beim Mozilla unter Einstellungen/Sicherheit/Zertifikate.

Beim Zugriff auf einen entsprechend konfigurierten Webserver ermittelt der Browser welches der installierten Zertifikate zum Zertifikat auf dem Webserver passt. Das heißt, welches der lokal installierten Zertifikate von der CA des Zertifikats des Servers signiert wurde. Dieses wird dann zwecks Authentisierung an den Server ausgeliefert.

Apache für zertifkiatbasierte Authentifizierung konfigurieren

Generelle Authentisierung durch Zertifikate

Der Apache wird global, per virtuellem Host oder Directory Sektion für die Authentifizierung mittels Zertifikaten konfiguriert:

  SLCACertificateFile       /etc/apache/ssl/ca_cert.crt

  <Directory /secure>
    	SSLVerifyClient require
    	SSLVerifyDepth 1
  </Directory>

Der Zugriff auf das Verzeichnis /secure ist jetzt nur mit einem Zertifikat möglich, das von der CA signiert worden ist,

Authentisierung einzelner Zertifkate

Wenn nur einzelne von der CA signierte (Client-) Zertifikate für den Zugriff zugelassen werden sollen, wird die Konfiguration des Apache Servers geändert.

    SSLVerifyClient      none

    SSLCACertificateFile /home/martin/data/SSL/ca/ca.crt
    <Directory /srv/www/htdocs/customers>
        SSLVerifyClient      require
        SSLVerifyDepth       1
        SSLOptions           +FakeBasicAuth
        SSLRequireSSL
        SSLRequire           %{SSL_CLIENT_S_DN_O}  eq "LWsystems" and \
                             %{SSL_CLIENT_S_DN_OU} in {"cst_1", "cst_2"}
    </Directory>

Das Verzeichnis customers dürfen nur Clients lesen, deren Zertifikate mit dem Parameter O=LWsystems und OU=cst_1 bzw. OU=cst_2 im Distinguished Name ausgestellt wurden. Allen Clients mit anderen Zeritifikaten der CA wird der Zugriff verweigert.


< zurück  | weiter >