Allgemeines zu SSL-Zertifikaten
Diese Seite richtet sich an DV-Koordinatoren von Instituten und Einrichtungen, die SSL/TLS/HTTPS-Zertifikate (nach dem X.509-Standard) fürfür den Betrieb von Servern benötigen.benötigen. Die TU Braunschweig setzt Zertifikate aus der DFN-PKI ein. Diese sind fürfür den dienstlichen Einsatz vorgesehen und könnenkönnen kostenfrei beantragt werden. Das Verwenden von Zertifikaten anderer Anbieter, wie z.B. Let's Encrypt ist nicht erlaubt.
Die Beantragung von SSL-Zertifikaten wird überüber den KDD bereitgestellt. Die entsprechende Dokumentation finden Sie hier.
Zertifikatsantrag (CSR) erzeugen
Der folgende Abschnitt beschreibt Details zur Erzeugung von privatem SchlüsselSchlüssel und Zertifikatsantrag.
Wenn Sie mehr Details benötigen,benötigen, finden Sie eine umfänglichereumfänglichere Anleitung zu diesem Thema auf den Webseiten der DFN-PKI und darüberdarüber hinaus die vollständigevollständige Anleitung zu OpenSSL unter https://www.openssl.org/docs/
Zertifikatsantrag und privaten SchlüsselSchlüssel erzeugen
Wenn Sie noch kein SSL auf Ihrem Server einsetzen, verfahren Sie bitte, wie im Folgenden beschrieben. ZertifikatsanträgeZertifikatsanträge müssenmüssen in einem maschinell verarbeitbaren Format bei der RA eingereicht werden, dem Public Key Cryptography Standard Nr 10, PKCS#10, und werden bei Verwendung eines geeigneten Werkzeuges automatisch erstellt. Der Zertifikatsantrag setzt sich aus vier Teilen zusammen:
-
Dem
„„Subject DistinguishedName“Name“, kurz DN, die teilweise durch die Policy vorgegeben sind, wie Landesbezeichnung, Country, C=de; die Ortsbezeichnung O=Technische Universitaet Braunschweig. -
Den optionalen Attributen.
-
Einer digitalen Signatur mit dem privaten
SchlüsselSchlüssel (derspäterspäter auch auf dem Server abgelegt wird). -
Einer Kennzeichnung des verwendeten Signaturalgorithmus.
Insbesondere wenn Sie mehrere Zertifikate beantragen, sollten Sie sich beispielsweise eine Konfigurationsdatei fürfür OpenSSL erstellen, in der die wesentlichen Angaben bereits enthalten sind. Im Unterabschnitt „„OpenSSL-Konfigurationsdatei“Konfigurationsdatei“ ist ein Beispiel angegeben.
Falls Sie Ihren Dienst bisher ohne Zertifikat betreiben, müssenmüssen Sie ein entsprechendes SchlüsselpaarSchlüsselpaar nach dem RSAVerfahren erzeugen. Das folgende openssl-Kommando führtführt die Schlüsselgenerierung,Schlüsselgenerierung, die Abfrage eines Passwortes fürfür diesen Schlüssel,Schlüssel, die Attribut-Abfrage und die anschliessende Erstellung des Zertifikatsantrages durch:
openssl req -config myopenssl.conf -newkey rsa:4096 -outform pem -out certreq.pem
Die einzelnen Befehlsteile bedeuten folgendes:
-
openssl: Programmname des Openssl-Kommandos, evtl. muss der komplette Pfad z.B. /usr/local/bin/openssl angegeben werden.
-
req: erstellt einen PKCS#10-Antrag
-
-config: verweist ggf. auf die ssl-Konfig-Datei
fürfür Voreinstellungen, siehe Abschnitt„„OpenSSLKonfigurationsdatei“Konfigurationsdatei“ -
-newkey rsa:4096: neues
SchlüsselpaarSchlüsselpaar mit RSA und einer Key-LängeLänge von 4096 Bit -
-outform PEM: Privacy Enhanced Mail Ausgabeformat
-
-out certreq.pem: speichert den Antrag unter certreq.pem. Achtung: die Konfigurationsdatei
enthältenthält die Direktive, den neu zu erstellenden privatenSchlüsselSchlüssel in server-key.pem zu speichern. Sollen mehrereAnträgeAnträge hintereinander erstellt werden,müssenmüssen die Dateien nach jedem Durchgang umbenannt werden, um einÜberschreibenÜberschreiben zu vermeiden.
Zertifikatsantrag ohne erneute Erzeugung eines privaten SchlüsselsSchlüssels erzeugen
Setzen Sie bereits SSL auf Ihrem Server ein und möchtenmöchten Sie den dafürdafür verwendeten private key weiter verwenden, so erzeugen Sie den Zertifikatsrequest wie in diesem Abschnitt beschrieben.
LäuftLäuft der Dienst mit einem selbst signierten Zertifikat und haben Sie bereits einen RSA-SchlüsselSchlüssel erstellt mit einer LängeLänge von 2048 Bit, könnenkönnen Sie diesen SchlüsselSchlüssel fürfür Ihr neues Zertifikat weiter verwenden. Mit folgendem Kommando kann dann eine Zertifizierungsanfrage fürfür den vorhandenen Key (server.key) erstellt werden:
openssl req -new -config myopenssl.conf -key server-key.pem -keyform PEM -outform pem -out certreq.pem
Mit -keyform PEM bzw. -keyform DER sollten Sie das Format des vorhandenen SchlüsselsSchlüssels berücksichtigen.berücksichtigen.
Entfernen der Passphrase fürfür automatischen Start von Diensten
Beachten Sie bitte auch, dass Sie den Dienst den Sie mit dem so beantragten Zertifikat ausstatten, beim Start/Neustart stets die Angabe der Passphrase erfordert. Um einen Dienst auch ohne manuelle Eingabe der Passphrase starten zu können,können, muss man ggf. auf die Passphrase verzichten. FürFür den Betrieb von Diensten, die auch nach einem ungeplanten Neustart des Servers (z.B. Stromausfall, Softwarefehler) sofort und ohne manuelle Intervention erreichbar sein sollen, muss die Passphrase entfernt werden. DarüberDarüber hinaus setzen manche Produkte voraus, dass man zuvor die Passphrase entfernt.
Das Entfernen der Passphrase ist kritisch und aus Sicht der IT-Sicherheit nicht empfehlenswert. Das Zertifikat auf dem Server ist dann ungeschütztungeschützt hinterlegt und kann bei einer Kompromittierung des Servers besonders einfach kopiert und fürfür Angriffe genutzt werden. GrundsätzlichGrundsätzlich - ob mit oder ohne Passphrase - gilt: Sollte der Server gehackt werden, so ist das Zertifikat samt private key nicht mehr vertrauenswürdig.vertrauenswürdig. Das Zertifikat muss dann umgehend gesperrt werden. Sie müssenmüssen in einem solchen Fall sowohl einen neuen private key generieren, als auch ein neues Zertifikat beantragen.
Das Entfernen der Passphrase kann mit dem folgenden Kommando durchgeführtdurchgeführt werden:
openssl rsa -in server-key.pem -out server-key_nopass.pem
In AbhängigkeitAbhängigkeit von der Version von OpenSSL kann die genaue Kommandosyntax leicht abweichen.
OpenSSL Konfigurationsdatei
In manchen der zuvor aufgeführtenaufgeführten Kommandos wird eine Konfigurationsdatei referenziert:
... -config myopenssl.conf ...
(ohne Alternative DNS Names)
Sollte der Server nur überüber genau einen Hostnamen erreicht werden, könntekönnte der Inhalt einer solchen Datei wie weiter unten beschrieben aussehen.
(mit Alternative DNS Names)
Sollte der Server mehr als einen Namen (z.B. CNAMES/Aliase) haben, so können/können/sollten alle Namen entsprechend im Zertifikat hinterlegt werden. Zu diesem Zweck benutzen Sie bitte das Eingabefeld „„Subject Alternative Names“Names“ des Webformulars wie oben beschrieben.
Alternativ, aber aufwendiger, lassen sich die Alternativnamen auch überüber die Konfigurationsdatei angeben. Dazu ändernändern Sie, wie weiter unten beschrieben, am Ende die Beispiel-Hostnamen unterhalb von ““[subject_alt_name]„„ in die Aliase um, überüber die der Server zusätzlichzusätzlich zum eigentlichen Hostnamen (wird bei der Erstellung des Zertifikatsantrags erfragt oder kann bei „commonName“„commonName“ angegeben werden) noch erreicht werden soll. AußerdemAußerdem könnenkönnen Sie weitere Namen in entsprechender Weise hinzufügen.hinzufügen.
Zertifikat anzeigen
Der Datei, die Sie per E-Mail aus der CA zugesendet bekommen, könnenkönnen Sie die in ihr enthaltenen Informationen nicht ansehen. Um die Zertifikatsinformationen einer Zertifikatsdatei anzeigen zu können,können, verwenden Sie:
openssl x509 -text -noout -in server-crt.pem
Zertifikat sperren
Durch die Beantragung des Zertifikates akzeptieren Sie Handlungsanweisungen, dass Sie Zertifikate bei Bedarf auch wieder sperren. GründeGründe fürfür eine Sperrung könntenkönnten sein:
-
Ein Zertifikat soll ersetzt oder erneuert werden (das vorherige ist zu sperren).
-
Der private Key wurde offen gelegt.
-
Der Server wurde kompromittiert.
Durch die Sperrung eines Zertifikats wird dessen eindeutige Seriennummer auf einer Sperrliste/Widerrufsliste (certificate revocation list, CRL) veröffentlicht.veröffentlicht. BezüglichBezüglich der Umsetzung der Sperrung von Zertifikaten bei Clients ist zur Zeit in manchen FällenFällen noch einiges im Argen. Im Idealfall ist bei einem gesperrten Zertifikat die weitere Verwendung des Zertifikates aufgrund der PrüfungPrüfung der Sperrliste seitens der Clients verhindert.
Die Sperrung eines Zertifikats lässtlässt sich nicht rückgängigrückgängig machen. Sollte ein Zertifikat irrtümlichirrtümlich gesperrt worden sein, müssenmüssen Sie ein neues Zertifikat beantragen.
FürFür die DurchführungDurchführung einer Sperrung gibt es drei Möglichkeiten:Möglichkeiten:
-
Sperren
überüber Webformular: Hiermüssenmüssen Sie die sogenannte„„certificateID“ID“ angeben. Diese ID finden Sie als„„Self-Enrollment CertificateID“ID“ in der ersten E-Mail, die Sie nach Beantragungüberüber das Webformular erhalten haben (Betreff:GÉANTGÉANT TCS: Awaiting approval for certificate FQDN). Weiterhinbenötigenbenötigen Sie die„„Annual RenewalPassphrase“Passphrase“, die Sie bei Beantragungüberüber das Webformular vergeben haben (siehe oben). -
Sperrantrag im KDD
überüber den entsprechenden Reiter (verfügbarverfügbar ab Ende 2022) -
Kontakt zum IT-Service-Desk. Geben Sie die Antragsnummer und/oder die Seriennummer und den Common Name an.
Installation eines Zertifikats fürfür Apache
Die Konfiguration der Zertifikate ist prinzipiell bei allen Apache-Installationen sehr ähnlichähnlich –– hier wird nur grundlegend dargelegt, wie dies vorzunehmen ist. FürFür versionsspezifische Abweichungen konsultieren Sie bitte die Hilfe überüber die man-pages Ihrer Linux-Distribution. Folgende Dateien werden benötigt:benötigt:
-
common_name.pem: Die Zertifikatsdatei, die Sie von einem der Links in der E-Mail bezogen haben.
FürFür Apache nutzen Sie bitten den zweiten Link in der E-Mail („„as Certificate (w/issuer after), PEMencoded“encoded“). -
common_name_interm.cer: Diese Datei
enthältenthält alle„über“„über“ dem Server liegenden Zertifikate bis zum Root Zertifikat des Zertifikatanbieters. Einen Link zu dieser Zertifikatskette erhalten Sie sie mit der E-Mail, in der auch die Links zu verschiedenen Zertifikatsformaten enthalten sind (Betreff:„GÉANT„GÉANT TCS certificate information: Common name ihres Servers““). Bitte nutzen Sie dazu den vorletzten Link („„as Root/Intermediate(s) only, PEMencoded“encoded“) in der E-Mail, die Sie erhalten haben. -
privkey.pem: Der private
SchlüsselSchlüssel des Servers, den Sie zur Erstellung des Zertikatantrags (CSR) genutzt haben.
Zur Installation sind die folgenden Schritte nötig:nötig:
-
Stoppen Sie den eventuell gestarteten Apache Webserver Dienst (z.B.
„„service httpdstop“stop“). -
Kopieren Sie die drei Zertifikatsdateien in einen Unterordner des Apache Webservers (z.B. :/etc/apache2/ssl.key/).
-
Editieren Sie bzw. legen Sie eine neue V-Hosts-Datei unter
““/etc/apache2/vhosts.d„d„ an. In der Konfigurationsdatei des V-Hosts werden unter anderem die Zertifikate mit angegeben. -
Wichtig ist, dass
„ServerName“„ServerName“ genau mit dem Namen angegeben wird,fürfür den Sie das Zertifikat beantragt haben. -
Den Aufbau der Datei (Beispielkonfiguration) finden Sie weiter unten.
-
Aktivieren Sie ggf. noch MOD_SSL
fürfür den Apache-Webserver. -
Starten Sie den Apache neu.
-
Besuchen Sie die Startseite Ihres Servers, kontrollieren Sie die Logfiles.
Installation eines Zertifikats fürfür NGINX
Folgen Sie prinzipiell den Anweisungen zur Installation bei Apache (siehe oben). Lediglich die Dateien, die Sie herunterladen müssenmüssen unterscheiden sich.
-
common_name_cert.cer: Eine Zertifikatsdatei nur
fürfür Ihren Server, die Sie von einem der Links in der E-Mail bezogen haben.FürFür NGINX nutzen Sie bitte den ersten Link in der E-Mail („„as Certificate only, PEMencoded“encoded“). -
common_name_interm.cer: Diese Datei
enthältenthält alle„über“„über“ dem Server liegenden Zertifikate vom Root Zertifikat des Zertifikatanbietersabwärts.abwärts. Einen Link zu dieser Zertifikatskette erhalten Sie sie mit der E-Mail, in der auch die Links zu verschiedenen Zertifikatsformaten enthalten sind (Betreff:„GÉANT„GÉANT TCS certificate information: Common name ihres Servers““). Bitte nutzen Sie dazu den vorletzten Link („„as Root/Intermediate(s) only, PEMencoded“encoded“) in der E-Mail, die sie erhalten haben. -
privkey.pem: Der private
SchlüsselSchlüssel des Servers, den Sie zur Erstellung des Zertikatantrags (CSR) genutzt haben.
FügenFügen Sie nun die beiden erhaltenen Zertifikatsdateien mittels „cat“„cat“ im Linux Terminal oder einem ähnlichenähnlichen Programm zusammen:
cat common_name.cer common_name_interm.cer > common_name_cert_chain.cer
Bitte nutzen Sie zum ZusammenfügenZusammenfügen der beiden Dateien keine Office-Programme, wie MS Office, Open Office oder Libre Office. In Ihrer NGINX Konfigurationsdatei geben Sie nun den Pfad zu der neu erstellten Datei (common_name_cert_chain.cer) als SSL_CERTIFICATE_PATH und den Pfad zur privaten SchlüsseldateiSchlüsseldatei Ihres Servers (privkey.pem) als SSL_KEY_PATH an.
Installation eines Zertifikats (allgemein)
FürFür die Konfiguration eines Zertifikates sollten Sie sich zuerst mit den Konfigurationsdateien Ihres Webservers vertraut machen. Diese finden Sie in der Regel unter /etc/<Produkt>/ . (/etc/nginx, /etc/apache2, /etc/httpd, ……).
Welche ÄnderungenÄnderungen Sie zur Absicherung Ihres Webservers an Ihrer Konfigurationsdatei vornehmen müssen,müssen, könnenkönnen Sie im kostenlosen Konfigurationsgenerator von Mozilla (https://ssl-config.mozilla.org/) sich anzeigen lassen. Nachdem Sie im Konfigurationsgenerator Ihre Einstellungen ausgewähltausgewählt haben, könnenkönnen Sie mit der angezeigte Konfiguration Ihre Webserver-Konfigurationsdatei anpassen.
Die Webserver-Konfigurationsdatei finden Sie direkt in Ihrem Konfigurationsordner, meist werden auch hier Produktnamen als Dateinamen verwendet. (apache2.conf, htttpd.conf, nginx.conf, ……)
Nach der Anpassung Ihrer Konfiguration sollten Sie die verwendeten Platzhalter (/path/to/……) an Ihre lokalen Gegebenheiten anpassen.AnschließendAnschließend könnenkönnen Sie die Syntax Ihrer Konfiguration mit einem Test (apachectl configtest , nginx -t , ……) überprüfenüberprüfen und bei Erfolg den Webserver neu starten.
Skizze einer Beispielkonfiguration: vhost-ssl.conf
[...] <VirtualHost _default_:443> DocumentRoot "/srv/www/htdocs" ServerName example.inst.tu-bs.de:443 [...] SSLEngine on SSLCertificateFile etc/apache2/ssl.key/common_name.pem SSLCertificateKeyFile /etc/apache2/ssl.key/privkey.pem SSLCertificateChainFile /etc/apache2/ssl.key/common_name_interm.cer [...] </VirtualHost> [...]
OpenSSL Konfigurationsdatei ohne Alternativnamen
# # myopenssl.conf # HOME = . RANDFILE = $ENV::HOME/.rnd [ req ] default_bits = 4096 default_keyfile = server-key.pem distinguished_name = req_distinguished_name attributes = req_attributes string_mask = nombstr req_extensions = v3_req [ req_distinguished_name ] countryName = Laendername (bitte nicht aendern) countryName_default = DE countryName_min = 2 countryName_max = 2 0.organizationName = Name der Organisation (bitte nicht aendern) 0.organizationName_default = Technische Universitaet Braunschweig 0.organizationalUnitName = Offizieller Einrichtungsname (ohne Umlaute) 0.organizationalUnitName_default = 1.organizationalUnitName = Optional Abteilung oder AG im Institut 1.organizationalUnitName_default = stateOrProvinceName = Bundesland (ausgeschrieben) stateOrProvinceName_default = Niedersachsen localityName = Locality Name - Stadt (Sitz der TU Braunschweig) localityName_default = Braunschweig commonName = Voller DNS-Name unter dem der Service erreichbar ist commonName_max = 64 emailAddress = Support E-Mail Adresse der Einrichtung (bevorzugt) emailAddress_max = 40 emailAddress_default = [ req_attributes ] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
OpenSSL Konfigurationsdatei mit Alternativnamen
# # myopenssl.conf # HOME = . RANDFILE = $ENV::HOME/.rnd [ req ] default_bits = 4096 default_keyfile = server-key.pem distinguished_name = req_distinguished_name attributes = req_attributes string_mask = nombstr req_extensions = v3_req [ req_distinguished_name ] countryName = Laendername (bitte nicht aendern) countryName_default = DE countryName_min = 2 countryName_max = 2 0.organizationName = Name der Organisation (bitte nicht aendern) 0.organizationName_default = Technische Universitaet Braunschweig 0.organizationalUnitName = Offizieller Einrichtungsname (ohne Umlaute) 0.organizationalUnitName_default = 1.organizationalUnitName = Optional Abteilung oder AG im Institut 1.organizationalUnitName_default = stateOrProvinceName = Bundesland (ausgeschrieben) stateOrProvinceName_default = Niedersachsen localityName = Locality Name - Stadt (Sitz der TU Braunschweig) localityName_default = Braunschweig commonName = Voller DNS-Name unter dem der Service erreichbar ist commonName_max = 64 emailAddress = Support E-Mail Adresse der Einrichtung (bevorzugt) emailAddress_max = 40 emailAddress_default = [ req_attributes ] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName=@subject_alt_name [ subject_alt_name ] DNS.1=*.tu-bs.de DNS.2=*.tu-braunschweig.de