Erstellung einer eigenen hierachischen CA
Inhaltsverzeichnis |
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 services mkdir cusomers mkdir services/openvpn mkdir cusomers/custom_1 mkdir services/openvpn/openvpnserver_1 mkdir cusomers/custom_1/user_1
OpenSSL Konfiguration anpassen
Das anpassen der "openssl.cnf" spart spater viel Schreibarbeit.
(Editor nach belieben)
mc -e /usr/lib/ssl/openssl.cnf
- in section "CA_default" den Pfad "dir" anpassen /etc/ssl/my_ca
- Standartwerte für "match" Einträge (Country, Provinve, OrganisationUnit) anpassen z.B.: DE, Sachsen, ...
notwendige Ergänzungen in der Ordnerstruktur
- (nur zur Sicherheit)
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
touch serial 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 bamseroot.key -out bamseroot.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 .bamseroot.crt -keyfile bamseroot.key -in services/openvpn/openvpn.csr -out services/openvpn/openvpn.crt -extensions v3_ca
- ein komplettes Zertifikat (Suchtiefe) für den Dienst erstellen
cat bamseroot.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 bamseroot.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
cd customers/ cd k0000/ openssl req -new -newkey rsa:1024 -keyout k0000.key -out k0000.csr openssl ca -cert ../../services/openvpn/openvpn.crt -keyfile ../../services/openvpn/openvpn.key -in k0000.csr -out k0000_openvpn.crt -extensions v3_ca
- test ...
openssl verify -CAfile ../../services/openvpn/openvpn_complete.crt k0000_openvpn.crt
- Vereinigte root CA für Kunden erstellen
cat ../../bamseroot.crt >> k0000_openvpn_copmplete.crt cat ../../services/openvpn/openvpn.crt >> k0000_openvpn_copmplete.crt cat k0000_openvpn.crt >> k0000_openvpn_copmplete.crt
- CERt für ersten User/Maschine des Kunden erstellen
cd k0000_pfsense_office/ openssl req -new -newkey rsa:1024 -keyout k0000_pfsense_office.key -out k0000_pfsense_office.csr openssl ca -cert ../k0000_openvpn.crt -keyfile ../k0000.key -in k0000_pfsense_office.csr -out k0000_pfsense_office.crt
- test
openssl verify -CAfile ../k0000_openvpn_copmplete.crt k0000_pfsense_office.crt