## page was renamed from Software/SSL-Zertifikate = Erstellung von SSL-Zertifikaten zur Verwendung mit PING Diensten = * [[/Uebersicht|Übersicht über die aktuell verwendeten Zertifikate]] == Schritt 1: Schlüssel erzeugen == Das Kommando {{{ openssl genrsa -out key.pem 2048 }}} erzeugt einen 2048-bit RSA-Schlüssel, dieser wird nicht durch zusätzliche Verschlüsselung oder ein Passwort geschützt, da bei einem automatischen Start des Dienstes (z.B. Apache) niemand anwesend ist, der ein Passwort eingeben könnte. /!\ Dementsprechend ist dafür zu sorgen, daß außer dem Dienst selbst möglichst nichts und niemand auf den Schlüssel zugreifen kann. == Schritt 2: Certificat Signing Request (CSR) erzeugen == Das Kommando {{{ openssl req -new -key key.pem -out csr.pem }}} erzeugt interaktiv einen Signing Request. Die Fragen sind dabei wie folgt zu beantworten: {{{ Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:NRW Locality Name (eg, city) []:Dortmund Organization Name (eg, company) [Internet Widgits Pty Ltd]:Verein zur Förderung der privaten Internet Nutzung (PING) e.V. Organizational Unit Name (eg, section) []:Server Admins Common Name (eg, YOUR name) []:www.ping.de Email Address []:vorstand@ping.de }}} Dabei ist der Wert '''Common Name''' mit dem FQDN des Servernamens zu füllen. /!\ Diese Stelle ist extrem wichtig, wird hier ein Fehler gemacht kann das Zertifikat hinterher nicht verwendet werden. Die Fragen nach ''challenge password'' und ''optional company name'' werden mir leeren Eingaben beantwortet. === Schritt 2,5: subjectAltName === [[https://www.chromestatus.com/feature/4981025180483584|Chrome(ium) seit Version 58]] unterstützt nicht mehr die Überprüfung von {{{commonName}}}s, daher ist es notwendig auch {{{subjectAltName}}}s ins Zertifikat aufzunehmen. Sowohl CaCert als auch Let's Encrypt fügen den subjectAltName automatisch als Kopie des CN in das Zertifikat ein. Die Aufnahme das sAN in den Signing Request ist nur bei CAs notwendig, die das nicht automatisch erzeugen oder, wenn mehr als ein sAN in das Zertifikat übernommen werden soll. Dafür wird ein Config-File benötigt: {{{ [req] req_extensions = v3_req [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = www.ping.de }}} == Schritt 3: Zertifikat erzeugen == Der in Schritt 2 erzeute CSR '''csr.pem''' wird nun an eine Zertifizierungsstelle weiter gegeben, die diesen -- evtl. gegen Zahlung einer Gebühr -- signiert. Das Ergebnis ist ein Zertifikat, welches zusammen mit dem in Schritt 1 generierten Schlüssel in der Konfiguration des Dienstes eingetragen werden muss. /!\ Auf keinen Fall den in Schritt 1 generierten Schlüssel an die Zertifizierungsstelle schicken, der Schlüssel muss unter allen Umständen geheim bleiben. Das fertige Zertifikat kann mit {{{ openssl x509 -in cert.pem -noout -text }}} angezeigt werden. == Erweiterte Attribute == Evtl. kann es notwendig sein, neben den in Schritt 2 aufgeführten Standardattributen zusätzliche Attribute in das Zertifikat -- und damit in den CSR -- aufzunehmen. Dazu muss die Datei '''openssl.cnf''' aus dem Verzeichnis der systemweiten Installation (''/etc/ssl'' oder ''/usr/lib/ssl'') kopiert und wie folg modifiziert werden: Im Abschnitt '''new_oids''' {{{ streetAddress = 2.5.4.9 postalCode = 2.5.4.17 }}} Im Abschnitt '''policy_match''' {{{ streetAddress = optional postalCode = optional }}} Im Abschnitt '''req_distinguished_name''' {{{ postalCode = Postal Code streetAddress = Street }}} /!\ Während in den Abschnitten '''new_oids''' und '''policy_match''' die Reihenfolge der Einträge irrelevant ist, ist diese im Abschnitt '''req_distinguished_name''' zu beachten: 1. countryName 2. postalCode 3. stateOrProvinceName 4. localityName 5. streetAddress 6. ... Die Erzeugung des CSR erfolgt dann wie in Schritt 2 beschrieben, '''außer''', daß noch die Optioen ''-config ./openssl.cnf'' angegeben werden muss. Der Aufruf lautet dann wie folgt: {{{ openssl req -config ./openssl.cnf -new -key key.pem -out csr.pem }}} == Externe Informationen == [[http://www.alvestrand.no/objectid/2.5.4.html|X.500 attribute types]]