Self-Signed Zertifikat für Multi-Domain Server

Posted by quark007 | Posted in Computer & IT, Smartphone & Android | Posted on 31-03-2015-05-2008

2

Wie bereits in den anderen Posts zu lesen ist, habe ich meinen HP MicroServer mit OpenMediaVault aufgesetzt. Das hat alles auch wunderbar funktioniert, bis ich zusätzlich OwnCloud installiert habe, um von der Google-Synchronisation von Kontakten und Kalendereinträgen unabhängig zu werden. Doch OwnCloud funktioniert nur über die sichere(re) HTTPS-Verbindung, für die ein Zertifikat notwendig ist. Da ich für den Heimbereich kein öffentlich zertifiziertes Zertifikat benötige, habe ich mir self-signed-Zertifikate erstellt, für jede Seite natürlich ein eigenes. Das war mir irgendwann zu bunt, da auch die Verwaltung in Android auf die Dauer lästig wurde.

Ich habe sehr viel herum probiert und auch viel im Internet gesucht und bin habe die Möglichkeit gefunden SubjectAltNames (SAN) zu definieren. Mit dieser Erweiterung lässt sich ein Zertifikat für mehrere Domains erstellen. Anders als ein Wildcard-Zertifikat (*.domain.tld) werden die Domains definiert und das Zertifikat ist nur für diese gültig. Ich habe sogar Anleitungen dafür gefunden, die aber leider nicht selbst-signierte Zertifikate erstellen sondern CSR-Dateien, also Zertifizierungsanfragen an öffentliche Stellen. Nach langem Suchen habe ich diese Anleitung gefunden, die ich etwas näher erläutern möchte:

How can I generate a self-signed certificate with SubjectAltName using OpenSSL?

Da ich zuvor schon viele HowTos probiert hatte, war meine openssl.cnf-datei (unter /etc/ssl/) schon arg verändert, dass ich mir eine Standard-Konfiguration aus dem Internet gesucht habe. Ich habe dies verwendet:

http://web.mit.edu/crypto/openssl.cnf

Jetzt kann man nach der obigen Anleitung weiter vorgehen.

  1. zunächst öffnet man die Datei openssl.cnf. Unter neueren Debian Versionen liegt sie unter /etc/ssl/ Falls sie nicht vorliegt erstellt man sie mit sudo nano /etc/ssl/openssl.cnf und fügt die Zeilen der Standard-Version ein
  2. Am Ende der Datei fügt man nun neue Zeilen an, nach diesem Muster
    [alternate_names]
    DNS.1        = example.com
    DNS.2        = www.example.com
    DNS.3        = mail.example.com
    DNS.4        = ftp.example.com
    
  3. als nächstes sucht man in der Datei (Strg + W) die Stelle [v3_ca] und fügt folgende Zeilen dazu
    [v3_ca]
    subjectAltName      = @alternate_names

    damit werden die Alternativen Domainnamen in das SAN-Attribut übernommen

  4. Zudem kann man aus der Zeile
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment
    

    das nonRepudiation herausnehmen. Laut Beschreibung ist es nutzlos und von Leuten eingeführt, die sich als Anwälte sehen.

  5. als nächstes sucht man in der Datei den Bereich [CA_default]: und die Zeilen
    # Extension copying option: use with caution.
    # copy_extensions = copy

    Falls diese nicht vorliegen, muss man sie hinzufügen und die Auskommentierung # vor copy_extensions entfernen. Nur dann werden die SANs auch wirklich in das Zertifikat übernommen.

  6. Damit kann es losgehen. Zunächst erzeugen wir unseren privaten Schlüssel. Dieser wird in dem Verzeichnis abgelegt, in dem wir uns momentan befinden. Ich habe mir unter /etc/ssl/ ein neues Verzeichnis angelegt (sudo mkdir /etc/ssl/new_cert/) und bin dorthin gewechselt (cd /etc/ssl/new_cert). Dann erzeugen wir unseren privaten Schlüssel:
    sudo openssl genrsa -out private.key 3072
  7. folgend wird mit dem privaten Schlüssel ein öffentlicher Schlüssel erzeugt:
    sudo openssl req -new -x509 -sha256 -days 3650 -nodes -key /etc/ssl/new_cert/private.key -out /etc/ssl/new_cert/omv.crt

    Die Fragen, die einem gestellt werden sollte man beantworten, muss es aber nicht. Mit [Enter] bleibt das Feld leer und es kommt die nächste Frage. Wichtig ist aber die Frage nach dem  CommonName. Dort ist es wichtig die IP-Adresse des Servers anzugeben.

  8. Anschließend kann man sich noch versichern, dass die SANs auch ordnungsgemäß eingetragen sind:
    sudo openssl x509 -in /etc/ssl/new_cert/omv.crt -text -noout

    Dabei sollte man auf die Zeile X509v3 Subject Alternative Name: achten. In der Zeile darunter müssen die zuvor definierten SANs zu finden sein

Wie man die damit erstellten Zertifikate in Nginx oder Apache einbindet findet man zu genüge z.B. hier bzw. hier.

Damit war es mir endlich möglich sowohl die OpenMediaVault-WebGUI, das WebMysql, Owncloud und auch meine Webserver mit einem Zertifikat über HTTPS zu erreichen. Wichtig war das insbesondere um mit DavDroid (F-Droid) und owncloud-SMS die Synchronisation mit OwnCloud zu ermöglichen.

Comments posted (2)

Vielen Dank für die Erwähnung von DAVdroid. Unsere offizielle Homepage ist übrigens https://davdroid.bitfire.at/ – würden uns über Verlinkung freuen (gerne zusätzlich zu F-Droid).

Habe ich sehr gerne eingefügt.
An dieser Stelle nochmal vielen Dank für die tolle Arbeit und dass diese auch noch kostenfrei zur Verfügung gestellt wird.

Write a comment


Warning: Undefined variable $user_ID in /home/web5wipjw/html/httpdocs/wordpress/wp-content/themes/Stripey/comments.php on line 57