Debian OpenSSL
Allgemein
OpenSSL schafft sämtliche Grundlagen, um sicher und verschlüsselt vertrauliche Informationen wie z.B. Username/Passwort und Emails via Internet zu übertragen. Für kommerzielle Anwendungen (z.B. Onlineshops und vor allem Onlinebanking) sind Zertifikate, erforderlich, die von einer vertrauenswürdigen CA (Certification Authority) signiert sind. Diese sog. Root_CA-Zertifiakte sind normalerweise in allen aktuellen Browsern und Mail-Clients bereits intergriert, sodass das Zertifikat einer Website automatisch verifiziert werden kann. Da ein derartiges signiertes Zertifikat für einen privat betriebenen Server viel zu kostspielig ist (ca 50€ ... 200€ pro Jahr), wird im folgenden ein sog. Selfsigned Zertifikat verwendet. zu diesem Zweck wird zunächst eine eigene CA eingerichtet, mit dessen Hilfe anschließend sämtliche zu erzeugenden Zertifikate signiert werden können. Nach dem (manuellen) Import des CA-Zertifikates in Browser/Mailtool, können diese analog zu kommerziell signierten Zertifikaten die Vertrauenswürdigkeit der Zertifikate ebenfalls überprüfen.
Installation OpenSSL
Falls OpenSSL noch nicht installiert sein sollte, dies nun nachholen:
apt-get install openssl
Verzeichnisse für die eigene CA und die selfsigned Zertifikate anlegen:
mkdir /etc/ssl/CA cd /etc/ssl/CA mkdir newcerts private
In diesen Verzeichnissen werden folgende Files abgelegt:
- CA:
- CA-Zertifikat
- Schlüssel, Requests und signierte Zertifikate
- Datenbank aller signieren zertifikate
- private: Privates Schlüsselfile der CA. Dieser Schlüssel ist enorm wichtig, und sollte an einer sicheren Stelle (Backup) archiviert werden, wo er sicher vor Datenverlust und unberechtigtem Zugriff ist. Ohne diesen Schlüssel können keine Zertifikate signiert werden. D.h. im Falle des Verlustes muss die CA und sämtliche Zertifikate neu erstellt werden.
- newcerts: Enthält eine Kopie sämtlicher signierter Zertifikate
Initialisieren der Datenbank:
echo '01' >serial touch index.txt
OpenSSL Konfigurationsdatei
Die Datei openssl.conf enthält Einträge, die im Folgenden eine Menge Tipparbeit einsparen wird
vi openssl.conf
Folgende Zeilen einfügen (evtl. default_days erhöhen, damit die mit dieser CA signierten Zertifikate länger als ein Jahr gültig sind):
# # OpenSSL configuration file. # # Establish working directory. dir = . [ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name [ req_distinguished_name ] # Variable name Prompt string #---------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------------ ------------------------------ 0.organizationName_default = Private localityName_default = Other stateOrProvinceName_default = Bavaria countryName_default = DE [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
Wichtige Anmerkungen
Für die SSL-Zertifikate sind einige Parameter wichtig. Diese sind:
* C (country:2 Zeichen) * ST (State/Provinz) * L (Locality/Ort) * O (Organisation) * OU (Organisational Unit) * CN (Common Name)
- Country(C) und State (ST) müssen bei CA und erstellten Zertifikaten identisch sein.
- Ort ist optional
- Organisation, Organisational Unit und Common Name sollten bei CA und erstellten Zertifikaten unterschiedlich sein. Ansonsten kann es einerseits bei der Signierung der Zertifikate selbst, oder auch später bei den Clients zu Problemen kommen.
- Common Name eines Zertifikates (Nicht CA) muss unbedingt exakt mit dem Servernamen des zu sichernden Servers übereinstimmen. Ansonsten werden die Clients den Unterschied zwischen Zertifkat Common Name und Servernamen "anmeckern".
CA erstellen
Die Certification Authority wird mit folgendem Befehl erzeugt (Gültigkeit der CA: 10Jahre - 3650 days):
openssl req -new -x509 -extensions v3_ca -keyout privatecakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf