TLS (Transaction Layer Security)
ist die standardisierten Weiterentwicklungen von SSL (TLS 1.0 = SSL 3.1). SSL wird also nun unter dem Namen TLS weiterentwickelt. TLS und SSL werden daher oft auch synonym verwendet. TLS ist laut RFC 2246 eine Technologie zur Sicherung des Netzwerk-Datenaustausches zwischen Anwendungen, das Datenschutz und Datenintegrität (“privacy and integrity”) gewährleistet (bzw. gewährleisten soll).
Der generelle Ablauf bei TLS beginnt mit dem Aufbau einer Verbindung vom Client zum Server. Dabei schickt er auch gleich eine Liste an unterstützten Cipher Suites mit. Anschliessend authentisiert sich der Server gegenüber dem Client mit seinem Zertifikat und der ausgewählten Cipher Suite. Der Client überprüft das Zertifikat und authentisiert sich ggf. selbst auch noch gegenüber dem Server mit einem eigenen Zertifikat. Nun schickt entweder der Client dem Server eine verschlüsselte Zufallszahl, die mit dem öffentlichen Schlüssel des Servers verschlüsselt ist, oder beide Parteien berechnen ein gemeinsames Geheimnis mit dem Diffie-Hellman-Schlüsselaustauschverfahren. Mit dem daraus abgeleiteten kryptographischen Schlüssel, werden nun alle Nachrichten der Verbindung mit einem ausgewählten symmetrischen Verschlüsselungsverfahren verschlüsselt.
Im folgenden Beispiel, erstelle ich ein neues Server Zertifikat als sowohl ein neues Client Zertifikat, welche beide mit einer lokal erstellten CA signiert werden.
Der Aufbau entspricht der obigen Übersicht.
Um überhaupt anschliessend eine eigene CA zu erstellen, benötige ich zuerst das passende OpenSSL Package für mein System sowie eine passende Ordnungsstruktur. Ich gehe daher wie folgt vor:
# yum install openssl.x86_64 # mkdir -p /opt/TLS_Certs/{Server_Cert-Key,Client_Cert-Key}
Um unsere späteren Client/Server Zertifikate zu erstellen, wird zuerst die neue CA erstellt. Dazu wird fogendermassen vorgegangen:
# cd /opt/TLS_Certs/
# openssl genrsa -aes256 -out ca-key.pem 4096
# openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
# chmod 0400 /opt/TLS_Certs/*.pem
Nun werden im ersten Teil einmal einen neuen Server Key, sowie ein neues Server Cert für den Server “vdock1” erstellt. Wir gehen wie folgt vor:
# cd /opt/TLS_Certs/Server_Cert-Key/
# vim /opt/TLS_Certs/Server_Cert-Key/extfile.cnf
subjectAltName = DNS:vdock1.pnet.ch extendedKeyUsage = serverAuth
# openssl genrsa -out server-key.pem 4096
# openssl req -subj "/CN=vdock1.pnet.ch" -sha256 -new -key server-key.pem -out server.csr
# openssl x509 -req -days 1825 -sha256 -in server.csr -CA ../ca.pem -CAkey ../ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
Jetzt müssen wir im zweiten Teil, noch ein passendes Client Zertifikat für unsere Clients erstellen. (Dieses Zertifikat, kann anschliessend auf alle Clients verteilt werden!)
# cd /opt/TLS_Certs/Client_Cert-Key/
# vim /opt/TLS_Certs/Client_Cert-Key/extfile.cnf
extendedKeyUsage = clientAuth
# openssl genrsa -out client-key.pem 4096
# openssl req -subj '/CN=vadmin.pnet.ch' -new -key client-key.pem -out client.csr
# openssl x509 -req -days 1825 -sha256 -in client.csr -CA ../ca.pem -CAkey ../ca-key.pem -CAcreateserial -out client-cert.pem -extfile extfile.cnf
Der Inhalt von: /opt/TLS_Certs/Server_Cert-Key/ wird in unserem Beispiel, auf dem Applikationsserver “vdock1.pnet.ch” kopiert und dort in der entsprechenden Applikation eingerichtet.
Der Inhalt von: /opt/TLS_Certs/Client_Cert-Key/ wird auf unseren Admin-Client(Server) “vadmin.pnet.ch” kopiert und dort eingerichtet, damit der Zugriff via TLS auf die Applikation möglich wird.
Ansible Skript zur vollautomatischen Erstellung und Verteilung der Key / Certs: