Am Anfang war das Zertifikat
Contents
x509 Zertifikate
Einleitung
Installiert man Dienste auf dem heimischen Arbeitsrechner, kommuniziert man ausschließlich mit localhost oder fürchtet sich nicht vor Datenschnüffeleien ist ein Zertifikat wohl etwas, was man bestenfalls von einer Schulungsmaßnahme erwartet. Sollen mehrere Dienste aber miteinander kommunizieren, sensible Daten wie Passwörter und Nutzdaten austauschen – und dies gar noch über das Internet – so ist es unumgänglich, diese Daten verschlüsselt zu übertragen. Dies kann mit Zertifikaten erreicht werden.
Zunächst werden wir die sogenannte „Certificate Authority“ einrichten. Das Resultat wird ein CA-Zertifikat sowie ein CA-Schlüssel sein. Ersteres kann verwendet werden um Zertifikate zu authentifizieren, letzteres benötigen wir zum unterschreiben aller weiteren Zertifikate, die wir erstellen werden.
Hinweis: Es ist nicht unbedingt nötig bzw. gewünscht eine eigene CA zu implementieren. Wer Geld für Zertifikate zahlen will, kann auf Dienste wie Verizon zurückgreifen, oder auf kostenlose Dienste wie Cacert.org, und den ersten Schritt überspringen.
1. Einrichten der „Certificate Authority“ Zertifikate
Zunächst installieren wir openssl auf dem Rechner und erstellen ein Verzeichnis, in welchem wir unsere Zertifikate speichern werden
aptitude install openssl cd /etc/ssl
In der Datei /etc/ssl/openssl.cnf muss die Variable dir angepasst werden, etwa so
dir = ./newCA # Where everything is kept
Nun kann es schon losgehen. Wir setzen folgenden Befehl auf der Konsole ab und folgen den Anweisungen
mkdir -p newCA/{certs,crl,private,newcerts} echo "00" > newCA/serial touch newCA/index.txt openssl req -new -keyout newCA/private/caKey.pem -out newCA/careq.pem Generating a 1024 bit RSA private key ............++++++ ......................++++++ writing new private key to 'newCA/private/cakey.pem' Enter PEM pass phrase: <super sicheres Passwort> Verifying password - Enter PEM pass phrase: <nochmal> ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]: Hessen Locality Name (eg, city) []: Frankfurt Organization Name (eg, company) [Internet Widgits]:whisperedSHOUTS Networks Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:whisperedSHOUTS Certificate Authority Email Address []:certmaster@whisperedshouts.dePlease enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Es wurde ein neuer Schlüssel im Verzeichnis newCA/private sowie ein Certificate Signing Request im Verzeichnis newCA erstellt. Dieses müssen wir nun selbst signieren
openssl ca -out newCA/caCert.pem -days 1095 -batch -keyfile newCA/private/caKey.pem -selfsign -extensions v3_ca -infiles newCA/careq.pem
2. Ein Certificate Signing Request erstellen
Mit folgendem Kommando erstellen wir ein Certificate Signing Request (csr) für ein neues Zertifikat. Dieser Request wird dann von der Certification Authority genehmigt.
openssl req -new -keyout certKey01.pem -out newreq.pem -days 365 Generating a 1024 bit RSA private key ..................++++++ ................++++++ writing new private key to 'certKey01.pem' Enter PEM pass phrase: <geheimes Passwort> Verifying - Enter PEM pass phrase: <nochmal das geheime Passwort> ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Hessen Locality Name (eg, city) []:Frankfurt Organization Name (eg, company) [Internet Widgits]:whisperedSHOUTS Networks Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:www.whisperedshouts.de Email Address []:webmaster@whisperedshouts.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
2.1 CSR Signieren
Der csr muss nun der Certificate Authority übergeben werden. Auf dieser kann dann mit folgendem Kommando das Zertifikat erstellt und signiert werden:
openssl ca -policy policy_anything -out newCA/certs/cert01.pem -infiles newreq.pemUsing configuration from /usr/lib/ssl/openssl.cnfEnter pass phrase for ./CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 2 (0x2) Validity Not Before: Nov 15 01:52:54 2008 GMT Not After : Nov 15 01:52:54 2009 GMT Subject: countryName = DE stateOrProvinceName = Hessen localityName = Frankfurt organizationName = vt23 Networks commonName = www.whisperedshouts.de emailAddress = mario@whisperedshouts.de X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 18:3A:48:44:CE:64:1C:E4:4F:30:D2:A9:4C:07:9F:84:EB:27:84:B5 X509v3 Authority Key Identifier: keyid:E8:02:7D:44:A2:87:B0:18:7A:E4:5D:4A:18:3A:37:EB:4E:76:08:F0Certificate is to be certified until Nov 15 01:52:54 2009 GMT (365 days) Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
3. Zertifikate konvertieren
Eine kurze Übersicht, um Zertifikate zu konvertieren:
Umwandlung von PEM zu DER
openssl x509 –in input.crt –inform PEM –out output.crt –outform DER
Umwandlung von DER zu PEM
openssl x509 –in input.crt –inform DER –out output.crt –outform PEM
Umwandlung Schlüssels von PEM zu DER
openssl rsa –in input.key –inform PEM –out output.key –outform DER
Umwandlung Schlüssels vom DER zu PEM
openssl rsa –in input.key –inform DER –out output.key –outform PEM
Passwort entfernen
(z.B. zur Verwendung in http Server)
openssl rsa -in MYKEY.key >> MYKEY-NOCRYPT.key
Umwandlung Zertifikats + Schlüssel ins pkcs#12 Format
(z.B. für Browser)
openssl pkcs12 -export -in MYCERT.crt -inkey MYKEY.key -out KEYSTORE.p12 -name "Mein Name"
Umwandlung Zertifikats + Schlüssel ins pkcs#12 Format
mit Chain (z.B. für tomcat)
openssl pkcs12 -export -in MYCERT.crt -inkey MYKEY.key -out KEYSTORE.p12 -name "tomcat" -CAfile CA-CERT.crt -chain
Umwandlung von pkcs#12 nach PEM (Zertifikat + Schlüssel)
openssl pkcs12 -in KEYSTORE.pfx -out KEYSTORE.pem -nodes