Debian Apache SSL Client Auth

Aus Wiki
Version vom 15. Mai 2015, 12:10 Uhr von Erich (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Allgemein

Apache bietet die Möglichkeit, Clients anhand eines SSL-Zertifikates eindeutig zu identifizieren. Zu diesem Zweck ist ein signiertes Zertifikat erforderlich, dessen Root_CA dem Apache-Server bekannt ist. Das Zertifikat wird im Browser importiert. Auf Anforderung des Servers überträgt der Webbrowser das Zertifikat zum Webserver, der das Zertifikat verifizieren kann. Nur wenn er es als gültiges Zertifikat erkennt, ist der User berechtigt, die geschützte Website zu besuchen. Es sollte ein Passwort für das Client Zertifikat vergeben werden, um die Sicherheit nochmals zu erhöhen. Ansonsten kann jeder, der im Besitz des Zertifikates gelangt, auf die Webseite zugreifen.

Voraussetzungen:

  • OpenSSL mit Root_CA
  • Apache Webserver mit SSL


Apache-Konfiguration

Die Seite, die unter /var/www/protected/ abgelegt ist, soll nur von Clients erreichbar sein, die ein korrektes SSL Client-Zertifikat besitzen.

Apache2.2

vi /etc/apache2/sites-enabled/protected_https.conf

Folgende Zeilen einfügen und anpassen:

<VirtualHost *:443>
  DocumentRoot /var/www/protected
  ServerName protected.schiele.homelinux.org
  
  <Directory /var/www/protected/>
      Options +FollowSymLinks
      AllowOverride All
      order allow,deny
      allow from all
      Require ssl-verify-client
      SSLVerifyClient require
      SSLVerifyDepth 1
  </Directory>
  SSLCACertificateFile /etc/ssl/CA/cacert.pem
  SSLCertificateFile /etc/ssl/CA/certs/wildcard.pem
  SSLEngine on
</VirtualHost>

Apache2.4

vi /etc/apache2/sites-enabled/protected_https.conf

Folgende Zeilen einfügen und anpassen:

<VirtualHost *:443>
  DocumentRoot /var/www/protected
  ServerName protected.schiele.homelinux.org
 
  <Directory /var/www/protected/>
      Options +FollowSymLinks
      AllowOverride All
      Require ssl-verify-client
      SSLVerifyClient require
      SSLVerifyDepth 1
  </Directory>
  SSLCACertificateFile /etc/ssl/CA/cacert.pem
  SSLCertificateFile /etc/ssl/CA/certs/wildcard.pem
  SSLEngine on
</VirtualHost>

Apache neustart

Apache muss nach Konfigänderung neu gestartet werden:

/etc/init.d/apache2 restart


Client Zertifiakt erstellen

Client Zertifikate werden analog derer von Server-Zertifikaten erzeugt. Als CN wird jedoch keine Server Adresse verwendet, sondern der Name des Clients. Das Zertifikat wird im PKCS12-Format anstatt PEM-Format gespeichert und im Browser des Client importiert.

cd /etc/openssl/CA
openssl req -new -nodes -out client-req.pem -config ./openssl.conf
Bulbgraph.png Hinweis:
Bei der Frage nach dem Common Name (CN) unbedingt den Namen und Vornamen des Client Users eingeben.

Signieren des Zertifikates:

openssl ca -out cert.pem -config ./openssl.conf -infiles client-req.pem 

Exportieren ins PKCS12-Format:

openssl pkcs12 -export -in cert.pem -inkey key.pem -name "Name Vorname Client Cert" -out client.p12

Es wird nach dem Export-Passwort gefragt, das der User beim Import in den Webbrowser eingeben muss. Dieses muss also dem Client-User mitgeteilt werden.

openssl pkcs12 -in client.p12 -clcerts -nokeys -info

Das Import-Passwort= Export-Passwort erneut eingeben.

Aufräumen:

mv key.pem key/client-Name.pem
mv client-req.pem req/client-Name.pem
mv cert.pem certs/client-Name.pem
mv client.p12 certs/client-Name.p12


Einbinden des Client-Zertifikats in Webbrowser

Mozilla Firefox

  • Einstellungsdialog öffnen
  • Tab Erweitert
  • Tab Verschlüsselung
  • Button Zertifikate anzeigen
  • Tab Ihre Zertifikate
  • Button Importieren auswählen
  • Das auf den Client übertragene Client-Zertifikat (client-Name.p12) auswählen und bestätigen.
  • Das Export-Passwort eingeben.
  • Eine Meludng erscheint, dass das Zertifikat erfolgreich importiert wurde.
  • Der Dialog kann nun wieder verlassen werden.


Internet Explorer

  • Menü Extras/Internetoptionen
  • Reiter Inhalte
  • Button Zertifikate anwählen
  • Reiter Eigene Zertifikate
  • Button Importieren anklicken
    • Im Assisten Button Weiter anklicken
    • Button Durchsuchen anklicken
    • Dateifilter im Dateiauswhldialog einstellen, damit Files mit .p12 Endung angezeigt werden
    • Cleint-Zertifikat auswählen
    • Button Weiter anklicken
    • Export-Passwort eingeben
    • Evtl., falls gewünscht die Option Hohe Sicherheit ... auswählen, damit Internet Explorer bei jeder Verwendung dieses Cleint-Zertifikates das Export-Passwort anfrägt. Falls diese Option nicht angewählt wird, dann wird das Passwort nur beim Importieren abgefragt und dann dauerhaft gespeichert.
    • Button Weiter anklicken
    • Option Alle Zertifikate in folgendem Speicher speichern und als Zertifikatespeicher Eigene Zertifikate. Anschließen Button Weiter aktivieren.
    • Assistent mit Button Fertigstellen verlassen.
  • Der Einstellungsdialog kann nun wieder verlassen werden.