IT-Wissen/tls-ssl/README.md
Roger Rutishauser 5081d5137a tls
2024-10-21 12:41:43 +02:00

7.4 KiB

Table of Contents

SSL/TLS

Übersicht: https://www.sslmarket.ch/ssl/formate-von-ssl-zertifikaten-und-ihre

Windows TLS aktivieren

Unter Windows muss TLS 1.0, TLS 1.1 und TLS 1.2 aktiviert werden. Dies kann in den Internet Options vom Internet Explorer gemacht werden:

Zertifikat-Dateien umwandeln, bündeln etc.

Chained Certificate erstellen

Ein Chained Certificate enthält das Server Zertifikat sowie Intermediate-/Root-Zertifikate.

  • Falls nur das Server-Zertifikat vorhanden ist, muss das Root- und Intermediate-Zertifikat separat aus dem Browser herunter geladen werden. Bei der Export-Möglichkeit sollte Base-64 codiert im X.509 Standard (.cer) gewählt werden. Die 3 Teile müssen dann wie im nächsten Punkt beschrieben in einer Datei zusammengefasst werden.
  • Falls ein "Bundle" (Root- und Intermediate-Zertifikat) und ein Server-Zertifikat separat geliefert wird, muss dies in eine Datei zusammengefügt werden:
  1. Position: Server-Zertifikat\
  2. Position: Intermediate Zertifikat\
  3. Position: Root-Zertifikat.

Abspeichern als .chained.crt.

PFX erstellen aus Server-Zertifikat und Key

Um das Zertifikat in das gewünschte Format zu bekommen brauch man zuerst die 2 Basis-Dateien:

  • Zertifikat ("pem", "cer", "crt" oder andere Dateiendung)
  • Der Private Key (oft mit ".key" Dateiendung), welcher mit dem CSR erstellt wird und zu diesem Zertifikat gehört.

Um Intermediate und Root-Zertifikate mit in das PKCS12 aufzunehmen, bedarf es einen einfachen Tricks:

  • Server-Zertifikat in PEM Format (Base64 encoded) abspeichern
  • Private Key in PEM Format (Base64 encoded) abspeichern
  • Server-Zertifikat in Editor öffnen
  • Darunter Intermediate und Root Zertifikate einfügen (in dieser Reihenfolge)
  • Wir haben nun ein Full Chained Certificate, das wir als .crt abspeichern. 

Nun wir die gebündelte Datei (.crt) und der Privatekey (.key) mit openssl zu einer Datei zusammengefasst zu der .pfx (oder je nach gusto .p12) Datei.

openssl pkcs12 -export -in chained.crt -inkey privateekey.key -out output.pfx

Die erzeugte p12 Datei enthält jetzt den privaten Schlüssel und das Zertifikat. Der Inhalt wird mit einem Passwort geschützt, das beim Absetzen des Befehls abgefragt wird.

Zu einer bereits bestehenden PKCS12 Datei können die Intermediates mit folgendem Befehl hinzugefügt werden:

openssl pkcs12 -export -inkey (Ihr Privatekey).key -in (Ihr Zertifikat).crt -out (Zertifikats Name).p12 -chain -CApath /etc/ssl/certs

Convert PKS12 (.pfx) to Base64

Extract the private key from a PFX to a PEM file

openssl pkcs12 -in filename.pfx -nocerts -out key.pem   # enter any temp passphrase

Removing the password from the private key

openssl rsa -in key.pem -out server.key   # <- that is what we need for nginx

Extract the certificate

openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert_only.pem

As DER (binary), not PEM. Using PowerShell:

Get-PfxCertificate -FilePath filename.pfx | Export-Certificate -FilePath cert_only.cer -Type CERT 

Extract the certificate chain (root and intermediate)

openssl pkcs12 -in 05-srvingesttst01.pfx -cacerts -nokeys -out cert.pem

Convert Base64 to DER (binary)

Used for cacerts, for example

openssl x509 -in cert.crt -outform der -out cert.der 
# view:
openssl x509 -in cert.der -inform der -text -noout 

Convert DER (binary) to Base64

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem 
# view:
openssl x509 -in cert.pem -text -noout 

IIS (Windows)

  • PFX Datei in IIS importieren
  • altes Zertifikat entfernen
  • Bindings prüfen und allenfalls anpassen

Nginx (Linux)

Die .key und *.chained.crt Dateien können wie hier beschrieben für die Konfiguration verwendet werden.

Cacerts / Java

Truststore

javax.net.ssl.trustStore, der Truststore für CA-Zertifikate.

Cacerts ist ein Truststore (vertraut den Zertifikaten). Der Default-Speicherort des cacerts ist jre/lib/security. Darin befinden sich die Root Zertifikate von den grössten Zertifizierungsstellen (ca. 104) Diesen Root Zertifikaten vertraut Java von Haus aus und alle anderen werden blockiert. Man kann hier weitere hinzufügen oder ein ganze neues cacerts bauen.

Java lehnt Zertifikate, die nicht im cacerts vorhanden sind aus Sicherheitsgründen ab. Ein Self Signed Certificate oder das Rootertifikat muss deshalb manuell hinterlegt werden. Ab diesem Moment "vertraut" Java diesem Zertifikat.

Neues Zertifikat in cacerts einfügen

keytool -importcert -trustcacerts -file /path/to/cert.pem -alias EinAliasName -keystore /path/to/cacerts -storepass changeit -noprompt

Ab Java 9 kann das PEM (base64 encoded) Zertifikat verwendet werden.
Bei Java < 9 sollte das Zertifikat im x509 DER Format vorliegen. Allenfalls ist eine Konvertierung nötig:

openssl x509 -outform der -in certificate.pem -out certificate.der

Zertifikat aus cacerts exportieren

keytool -export -storepass changeit -alias DerAliasName -keystore cacerts -file FQDNname.crt

Alle Einträge in cacerts auflisten

keytool -list -v -keystore "c:\...\cacerts" > cacerts_output.txt

Alter Eintrag in cacerts löschen

keytool -delete -alias aliasname -keystore ..\cacerts

Alias eines Keys im Keystore ändern

keytool -changealias -alias "your-very-very-long-alias" -destalias "new-alias" -keystore "/path/to/cacerts"

Tomcat (unter Windows)

Das Keystore-File von Tomcat beinhaltet das Serverzertifikat, die Chain of Trust (Root-/Intermediate Zertifikate), und den private Key. Tomcat verwendet JKS, PKCS11 or PKCS12 format keystores. Das JKS format ist Java's standard "Java KeyStore" Format. Das PKCS12 Format ist ein Internetstandard, und kann mit OpenSSL oder Microsoft's Key-Manager manipuliert werden.
Bei älteren Tomcat-Versionen (<8 ?) muss möglicherweise PFX in JKS umgewandelt werden:

Keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore tomcat.jks -deststoretype jks

Anschliessend in tomcat/conf/server.xml im von 443 oder 8443 die Angaben zu keystoreFile und keystorePass machen.

Zudem muss in den Tomcat Monitor Configurations im Tab „Java“ der Pfad zum Java Truststore (cacerts) hinzugefügt werden:

-Djavax.net.ssl.trustStore=D:\docuteam\apps\jdk\jre\lib\security\cacerts.

Ruby (unter Windows)

Damit Ruby Apps verschlüsselte Verbindungen über Self-Signed Certificates herstellen kann, muss das Root/Intermediate Zertifikat hinterlegt werden.

  • Intermediate und Root Zertifikat separat abspeichern als Base-64.
  • Dateiendung auf .pem anpassen, falls dies noch nicht der Fall ist.
  • Die 2 Dateien im Ordner ...\Ruby2x-x64\ssl\certs ablegen.
  • Das c_rehash.rb Skript im selben Ordner aus CMD heraus ausführen.: D:\...\Ruby26-x64\ssl\certs>ruby c_rehash.rb
  • Ab Ruby 3.2.2 befinden sich die Zertifikate und c_rehash.rb in D:\...\Ruby32-x64\bin\etc\ssl\certs

Weitere nützliche Befehle

Überprüfen, ob Key, CRT und CSR zusammen passen

Mit folgenden Befehlen kann überprüft werden, ob Key, CRT und CSR zusammen passen (muss 3x die gleiche Checksumme ergeben):

openssl rsa -noout -modulus -in irgendEinName.key.pem | openssl md5
openssl x509 -noout -modulus -in irgendEinName.crt.pem | openssl md5
openssl req -noout -modulus -in irgendEinName.csr | openssl md5