Erstellung einer eigenen hierachischen CA
(→OpenSSL Konfiguration anpassen) |
(→notwendige Ergänzungen in der Ordnerstruktur) |
||
Zeile 54: | Zeile 54: | ||
=== notwendige Ergänzungen in der Ordnerstruktur === | === notwendige Ergänzungen in der Ordnerstruktur === | ||
− | * | + | * falls wir nicht schon dort sind: |
cd /etc/ssl/my_ca | cd /etc/ssl/my_ca | ||
* Sammelordner für die Zertifikate (.pem files) | * Sammelordner für die Zertifikate (.pem files) | ||
Zeile 61: | Zeile 61: | ||
touch index.txt | touch index.txt | ||
* Zähler für den nächsten Zertifikatsnamen | * Zähler für den nächsten Zertifikatsnamen | ||
− | |||
echo 01 > serial | echo 01 > serial | ||
+ | |||
=== Root-CA erstellen === | === Root-CA erstellen === | ||
*(nur zur Sicherheit) | *(nur zur Sicherheit) |
Version vom 23. März 2011, 17:37 Uhr
Vorüberlegung
Mit hierachischen CA's kann man Berechtigungsstufen verwalten, ohne für jede Stufe ein extra Root-CA erzeugen zu müssen.
Im Grunde geht es darum die Struktur von Benutzerrechten und und abzusichernden Diensten abstrakt nachzubilden.
In Unserem Fall sollen
- ein Root-CA
- eine von der Root-CA signirte OpenVPN-CA
- ein von der OpenVPN-CA signiertes Server_A-CERT
- eine Kunde_1 Anfrage mit Key
- eine Kunde_1-OpenVPN-CA
- ein Kunde_1-OpenVPN-User_1-CERT
erstellt werden.
System
- debian || ubuntu z.B. (Debian 2.6.26-26lenny1)
- openssl ist installiert
angegebene System-Pfade beziehen sich auf Debian / Debian-Derivate
Los gehts
Ordnerstruktur anlegen
cd /etc/ssl mkdir my_ca cd my_ca mkdir -p services/openvpn/openvpnserver_1 mkdir -p customers/custom_1/user_1
OpenSSL Konfiguration anpassen
Das anpassen der "openssl.cnf" spart später viel Schreibarbeit.
- in Section "CA_default" den Pfad "dir" anpassen
- Standardwerte für "match" Einträge anpassen
/usr/lib/ssl/openssl.cnf (bzw. /etc/ssl/openssl.cnf):
[ CA_default ] dir = /etc/ssl/my_ca ... policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match ... [ req_distinguished_name ] countryName_default = DE ... stateOrProvinceName_default = Sachsen ... 0.organizationName_default = OSSI - Otto's Super Service International
notwendige Ergänzungen in der Ordnerstruktur
- falls wir nicht schon dort sind:
cd /etc/ssl/my_ca
- Sammelordner für die Zertifikate (.pem files)
mkdir newcerts
- Index vorhandener Zertifikate
touch index.txt
- Zähler für den nächsten Zertifikatsnamen
echo 01 > serial
Root-CA erstellen
- (nur zur Sicherheit)
cd /etc/ssl/my_ca
- diese CA gilt 10 Jahre
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout myroot.key -out myroot.crt -days 3650
- Diffie-Hellmann Parameter erzeugen
openssl dhparam -out dh1024.pem
CA für OpenVPN Dienst erstellen
- (nur zur Sicherheit)
cd /etc/ssl/my_ca
- die Extension v3_ca bewirkt, das erstellen einer "unter-CA"
openssl req -new -newkey rsa:1024 -keyout services/openvpn/openvpn.key -out services/openvpn/openvpn.csr openssl ca -cert .myroot.crt -keyfile myroot.key -in services/openvpn/openvpn.csr -out services/openvpn/openvpn.crt -extensions v3_ca
- ein komplettes Zertifikat (Suchtiefe) für den Dienst erstellen
cat myroot.crt > services/openvpn/openvpn_complete.crt cat services/openvpn/openvpn.crt >> services/openvpn/openvpn_complete.crt
- ein Test ... sollte in etwa "openvpn_complete.crt: OK" ergeben. Testen ist wichtig !
openssl verify -CAfile myroot.crt services/openvpn/openvpn_complete.crt
Zertifikat für OpenVPN Server erstellen
- (nur zur Sicherheit)
cd /etc/ssl/my_ca
openssl req -new -newkey rsa:1024 -keyout services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.key -out services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.csr openssl ca -cert services/openvpn/openvpn.crt -keyfile services/openvpn/openvpn.key -in services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.csr -out services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.crt
- und wieder testen
openssl verify -CAfile .services/openvpn/openvpn_complete.crt services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.crt
CA für ersten Kunden erstellen
openssl req -new -newkey rsa:1024 -keyout customers/custom_1/custom_1.key -out customers/custom_1/custom_1..csr openssl ca -cert services/openvpn/openvpn.crt -keyfile services/openvpn/openvpn.key -in customers/custom_1/custom_1.csr -out customers/custom_1/custom_1_openvpn.crt -extensions v3_ca
- Test ...
openssl verify -CAfile services/openvpn/openvpn_complete.crt customers/custom_1/custom_1_openvpn.crt
- Vereinigte CA für Kunden erstellen (Suchtiefe)
cat myroot.crt > customers/custom_1/custom_1_openvpn_copmplete.crt cat services/openvpn/openvpn.crt >> customers/custom_1/custom_1_openvpn_copmplete.crt cat customers/custom_1/custom_1_openvpn.crt >> customers/custom_1/custom_1_openvpn_copmplete.crt
Zertifikat für den ersten User des Kunden "custom_1" erstellen
- (nur zur Sicherheit)
cd /etc/ssl/my_ca
openssl req -new -newkey rsa:1024 -keyout cutomers/custom_1/user_1/user_1.key -out customers/custom_1/user_1/user_1.csr openssl ca -cert customers/custom_1/custom_1_openvpn.crt -keyfile customers/custom_1/custom_1.key -in customers/custom_1/user_1/user_1.csr -out customers/custom_1/user_1/user_1.crt
- Test ...
openssl verify -CAfile customers/custom_1/custom_1_openvpn.crt customers/custom_1/user_1/user.crt
Hinweise
Vereinigte Zertifikate (Suchtiefe)
Damit Dienste (Programme) die entsprechenden Zertifikate prüfen können, müssen sie in der Lage sein den Pfad (Baum) der Signierung nach oben zu folgen.
Diesem Zweck dienen die vereinigten Zertifikate.
Bei der Verwendung von OpenVPN würden die Zertifikate wie folgt verwendet:
- server.conf
... ca /etc/ssl/my_ca/services/openvpn/openvpn_complete.crt cert /etc/ssl/my_ca/services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.crt key /etc/ssl/my_ca/services/openvpn/openvpnserver_1/openvpnserver_1_openvpn.key dh /etc/ssl/my_ca/dh1024.pem ...
- client.conf
... ca /PATH/custom_1_openvpn_copmplete.crt cert /PATH/user_1.crt key /PATH/user_1.key ...
-nodes Schlüssel ohne Kennwort
Zuweilen kann es nötig sein (wenn gleich aus Sicherheitsgründen davon abzuraten ist), passwortlose Schlüssel zu erstellen. Die Flag -nodes hilft.
-nodes if this option is specified then if a private key is created it will not be encrypted.
Verwendung:
openssl req -new -newkey rsa:1024 -nodes -keyout customers/custom_1/user_1/user_1.key -out customers/custom_1/user_1/user_1.csr