Das Problem liegt darin, daß pro IP-Adresse nur ein Zertifikat möglich ist. Normalerweise steht im Server-Zertifikat aber nur ein Rechnername. Bei abweichenden Namen virtueller Hosts würde der Web-Browser unnötigerweise eine Warnung ausgeben.
Es existieren mehrere mögliche Lösungsansätze, wobei die Variante mit einem Common Name und mehreren Subject Alt Names von Browsern wohl am besten unterstützt wird.
An dieser Stelle werde ich die Vorgehensweise beschreiben, wenn man ein selbstsigniertes Zertifikat basierend auf einem eigenen CA-Zertifikat ausstellt.
Die Alternativnamen trägt man am besten in die Abschnitte usr_cert und v3_ca der OpenSSL-Konfigurationsdatei in der Form:
subjectAltName=DNS:domain.tld, DNS:www.domain.tld, DNS:test.domain.tld, DNS:foobar.domain.tld
ein. Wichtig ist, daß der Common Name (z. B. domain.tld) an dieser Stelle nochmal wiederholt wird, auch wenn’s erstmal überflüssig scheint. Andernfalls beschwert sich z. B. Firefox über die fehlende Namensgleichheit zwischen dem angeforderten Rechnernamen und dem vermeintlichen Rechnernamen des Zertifikats.
Erzeugung der Schlüssel und Zertifikate
-
CA-Schlüssel erzeugen:
openssl genrsa -des3 -out ca.key 2048
-
CA-Zertifikat erzeugen:
openssl req -new -x509 -days 1000 -key ca.key -out ca.crt
-
Server-Schlüssel erzeugen:
openssl genrsa -out server.key 2048
-
Server-Zertifikatsanforderung erzeugen:
openssl req -new -key server.key -out server.csr
-
Server-Zertifikat erzeugen:
openssl ca -policy policy_anything -in server.csr -out server.crt
Alternativ:
openssl ca -name ServerCA -in server.csr -out server.crt
Schritt 3–5 für jeden Server wiederholen.
Selbstsigniertes Zertifikat mit privatem Schlüssel in einem
openssl req -new -x509 -days 365 -nodes -config server.cnf -out server.pem -keyout server.pem
Wichtige Parameter:
-x509
- selbstsigniert
-nodes
- ohne Paßwort