X.509 Drucken E-Mail
Geschrieben von: Administrator   
Mittwoch, 11. April 2007 13:49
Eine kleine Anleitung zum Aufbau einer CA Infrastruktur. Damit haben Sie das
nötige Handwerkszeug, um z.B. ein eigenes, auf X.509 Zertifikaten basierendes
VPN aufzubauen.

X.509 Zertifikate

In diesem Artikel wird nur auf X.509 Zertifikate im Zusammenhang mit IPsec
eingegangen. Der grundsätzliche Vorteil von X.509 liegt darin, dass das IPsec VPN
Gateway nur das CA Zertifikat und ein lokales Zertifikat benötigt, das von
der CA signiert ist. Das Gateway kann dann so konfiguriert werden,
dass es IPsec Verbindungen von allen Clients zulässt, die ein von dieser CA
signiertes Zertifikat haben. Benötigte Software:

Zertifikatskette erstellen

Zunächst brauchen wir für unsere CA einen Key, der mit einer Passphrase verschlüsselt
wird. Dieser Key wird immer gebraucht, wenn ein neues Zertifikat zu signieren ist, oder ein
Zertifikat widerrufen wird.

$ openssl genrsa -des3 -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
...............++
................................................++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:
$

Nun wird das CA Zertifikat generiert:

$ openssl req -new -x509 -days 7500 -key ca.key -out ca.crt
Enter pass phrase for ca.key:
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) []:Taunusstein
Organization Name (eg, company) [Internet Widgits Pty Ltd]:taunusstein.net WLAN
Organizational Unit Name (eg, section) []:Certification Authority
Common Name (eg, YOUR name) []:Freifunk.Net
Email Address []: Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können.
$

Die CA soll längerfristig verwendet werden, daher die Gültigkeit von 7500 Tagen.
Ist das CA Zertifikat verfallen, dann ist die gesamte WLAN Infrastruktur nicht mehr
mit IPsec betriebsfähig. Mit

$ openssl x509 -in ca.crt -noout -subject
subject= /C=de/ST=Hessen/L=Taunusstein/O=taunusstein.net WLAN/\
OU=Certification Authority/CN=Freifunk.Net/eailAddress= Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können.
$

können wir uns ansehen, um was es bei dem CA Zertifikat geht. Statt -subject kann man
auch -text angeben, dann werden noch weitere Daten angezeigt:

$ openssl x509 -in ca.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
af:3c:28:99:92:f9:87:28
Signature Algorithm: md5WithRSAEncryption
Issuer: C=de, ST=Hessen, L=Taunusstein, O=taunusstein.net WLAN, ...
Validity
Not Before: Dec 14 07:56:19 2004 GMT
Not After : Jun 27 07:56:19 2025 GMT
... (noch sehr viel Text)

Nun generieren wir für ein fiktives WiFi Netz in München einen Key und einen
"Certificate Signing Request":

$ openssl req -subj "/C=de/ST=Hessen/L=Muenchen/O=taunusstein.net WLAN\
/OU=Muenchner WLAN/CN=example.com/emailAddress= Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. " \
-newkey rsa:1024 -keyout muenchen-key.pem -out muenchen-csr.pem \
-passin pass:geheim -passout pass:geheim
Generating a 1024 bit RSA private key
..............++++++
...................++++++
writing new private key to 'muenchen-key.pem'
-----
$

Das o.g. Passwort sollte im realen Fall anders gewählt werden. ST gibt den
Standort der CA an, wir wissen ja alle, dass München nicht in Hessen liegt ;-)

$ openssl ca -batch -keyfile ca.key -cert ca.crt -in muenchen-csr.pem \
-days 735 -out muenchen-crt.pem -notext
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ca.key:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 0 (0x0)
Validity
Not Before: Dec 14 08:12:35 2004 GMT
Not After : Dec 19 08:12:35 2006 GMT
Subject:
countryName = de
stateOrProvinceName = Hessen
organizationName = taunusstein.net WLAN
organizationalUnitName = Muenchner WLAN
commonName = Freifunk.Net
emailAddress = Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können.
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
8F:5C:90:77:C4:B6:0E:31:D2:7E:BF:34:A3:08:D9:78:B6:B2:5C:73
X509v3 Authority Key Identifier:
keyid:72:A3:10:15:69:A0:77:05:AD:47:A9:F7:1B:F1:D2:7C:8A:06:F3:ED
DirName:/C=de/ST=Hessen/L=Taunusstein/O=taunusstein.net ...
serial:AF:3C:28:99:92:F9:87:28

Certificate is to be certified until Dec 19 08:12:35 2006 GMT (735 days)

Write out database with 1 new entries
Data Base Updated
$

Für den Client sind nun die Dateien muenchen-key.pem und muenchen-crt.pem wichtig.
Diese können unter OpenSwan gleich in die entsprechenden Verzeichnisse kopiert
werden. Unter Windows benötigen wir noch ein pkcs12 Chain. Dazu packen wir alle
muenchen... Dateien in eine Datei:

$ cat muenchen-* >> tmp
$

Nun machen wir das pkcs12 File:

$ openssl pkcs12 -export -in tmp -out muenchen.p12 -passin pass:geheim \
-passout pass:geheim
$

Unter Windows kann man dann muenchen.p12 mit dem mmc Modul "Zertifikate" in die
Zertifikatskette für "lokalen Computer" importieren. Hier wird zunächst das Passwort,
das bei openssl pkcs12 ... benutzt wurde, verwendet. Der private Schlüssel aus
openssl req ... wird nicht noch einmal zusätzlich verschlüsselt.

 

Aktualisiert ( Freitag, 13. April 2007 10:29 )