Debian OpenSSL

Aus Wiki
Version vom 6. Oktober 2010, 20:53 Uhr von Erich (Diskussion | Beiträge) (Die Seite wurde neu angelegt: =Allgemein= OpenSSL schafft sämtliche Grundlagen, um sicher und verschlüsselt vertrauliche Informationen wie z.B. Username/Passwort und Emails via Internet zu übertr...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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:

Warning.png Achtung:
Die beiden folgenden Befehle nur ausführen, wenn mit dieser CA vorher noch keine Zertifikate signiert wurden. Ansonsten könnte es zu Zertifikaten mit identischer Seriennummer kommen, was nicht zulässig ist, und die Clients "verwirren" könnte.
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