|
|||
|
SSL/TLS Verschlüsselung mit OpenSSL
Die Nutzung dieses Toolkits (bzw. jedem komplexerem) Toolkit erschließt sich dem angenenden Nutzer nicht sofort. Die Manpages verwirren im ersten Moment eher, als das sie helfen. Aus diesem Grunde habe ich dieses Dokument verfaßt. Es soll ein kompaktes HOWTO zur praktischen Nutzung von (Open)SSL und Programmen sein, die SSL unterstützen. Neben dem direkten Aufruf des Management von ZertifikatenErzeugen eines Root Certification Authority CertificateEine Root-CA benötigt ein selbstsigniertes Zertifikat, welches mit dem folgenen OpenSSL Aufruf erzeugt wird: openssl req -new -x509 -keyout ssl_priv.pem -out ca_cert.pem -days 3650 Hiermit wird ein Zertifikat mit einem zugehörigen Private-Key erzeugt. Das Zertifikat ist für den Zeitraum von 10 Jahren gültig. Es sollte sichergestellt werden, daß der Private-Key ausschließlich zum Signieren anderer Zertifikate verwendet wird. Dieser Key ist der sensibelste Teil einer CA-Infrastruktur. Der Zertifikatteil (public Key) dieses Paares wird den Clients (Browsern) zur Verfügung gestellt. Die Clients können die Gültigkeit von Zertifikaten, die mit diesem Private-Key signiert wurden, mit Hilfe des Root-CA Zertifikats (ca_cert.pem) verifizieren. Die Passphrase, welche beim Erstellen abgefragt wird sollte daher sehr sicher gewählt werden. Bei jedem Signieren eines anderen Zertifikats wird die Passphrase benötigt. Das Root-CA Zertifikat wird ausschlieslich zum Signieren von anderen Zertifikaten benötigt! Publikation des Root-CA ZertifikatsZuerst müssen alle für die Verifizierung durch Browser unnötigen Informationen aus dem Zertikat entfernt werden: openssl x509 -in ca_cert.pem -out ca_cert.crt Dieses Zertifikat kann auf der Website publiziert werden. Der Webserver sollte einen MIME Eintrag für .crt Files konfiguriert haben: <IfModule mod_ssl.c> Jetzt können sich die Clients das Zertifikat herunterladen und im Browser installieren. Wenn dieses erfolgt ist, akzeptiert der Browser alle Zertifikate, die mit dem zugehörigen Root-CA Key signiert wurden. Signieren eines ZertifiatsCSR erzeugenUm ein von der Root-CA (bzw. untergeordneten CA's) signiertes Zertifikat zu erhalten, wird zuerst ein Certificate Signing Request erzeugt. Dieses erfolgt mit Hilfe des openssl Befehls: openssl req -new -keyout client-key.pem -out client-req.pem -days 365 ACHTUNG! Der Common Name CN (eg, YOUR name) ist der Name, für den das Zertifikat erstellt und signiert wird. Bei einer Website ist es der FQDN des VirtuellenHosts, bei einem S/MIME Zertifikat ist es die Emailadresse des Eigentümers. Der Zertifiat- Request liegt jetzt in der Datei "client-req.pem und kann von der CA signiert werden. Der Private-Key des Zertifiatsbesitzers ist in client-key.pem gespeichert und sollte sicher aufbewahrt werden. Diese Datei wird nun an die CA gegeben, um sie dort vom Private-Key der Root-CA oder einer untergeordneten CA signieren zu lassen. Nun erstellen wir uns eine index.txt und serial, falls noch nicht geschehentouch index.txt touch serial && echo 01 >> serial Die Serial wird mit jedem erstellten Zertifikat hochgezählt, wir beginnen bei 1 Dannach gehts weiter mit ein paar Anpassungen der /usr/lib/ssl/openssl.cnf [ CA_default ] CSR von CA signierenDer CSR, der der CA übergeben wurde wird jetzt mit dem Private-Key der CA signiert. openssl ca -policy policy_anything -out client-cert.pem -infiles client-req.pem Die Konfiguration liegt in /usr/lib/ssl/openssl.cnf. Hier werden in der Sektion [CA_default] die Pfade für die CA Zertifikate und Keyfiles angegeben. Das fertige signierte Zertifikat ist in der Datei client-cert.pem gespeichert und kann dem Client zurückgegeben werden. Zertifikatsdaten anzeigenDie Details eines Zertifikats können mit Hilfe des Befehls openssl x509 -in client-cert.pem -noout -text angezeigt werden. Zertifikat in PKCS#12 (pfx) konvertierenopenssl pkcs12 -nokeys -in cert.pem -export -out cert.pfx -name "NAME" Zusätzliche (CA-) Zertifikate werden mit dem Schalter -certfile übergeben. Zertifikat entschlüsselnEin Key der in verschlüsselter Form vorliegt (also mit einer Passphrase gesichert ist), kann beim automatischen Restarten von Servern hinderlich sein. Um den Key zu entschlüsseln und die Passphrase zu entfernen ist der folgende Aufruf notwendig: openssl rsa -in server-rsa-key.pem > server-key.pem Die Passphrase wird noch einmal benötigt, um den Key zu entschlüsseln. Jetzt kann der Key geladen werden, ohne das eine Passphrase abgefragt wird. Debugging von SSL- verschlüsselten ProtokollenOpenSSL enthält ein Server- und ein Clientprogramm, welches einfach zum Debugging von SSL Clients- bzw. Servern genutzt werden kann. s_server
openssl s_server -accept 443 -www Der Server bindet sich an Port 443 HTTPS. Der Schalter s_client
openssl s_client -connect hostname:443 Mit dem obigen Kommando kann ein HTTPS-Server geprüft werden. Nach erfolgreichem Connect können normale HTTP-Befehle abgeseetzt werden. Schon beim Verbindugnsaufbau werden zahlreiche Informationen über die Verbindung angezeigt. Der Schalter
|