Debian OpenSSL: Unterschied zwischen den Versionen

Aus Wiki
Zur Navigation springen Zur Suche springen
(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...)
 
Keine Bearbeitungszusammenfassung
Zeile 109: Zeile 109:
   * O (Organisation)
   * O (Organisation)
   * OU (Organisational Unit)
   * OU (Organisational Unit)
  * Email Adress
   * CN (Common Name)  
   * CN (Common Name)  


* Country(C) und State (ST) müssen bei CA und erstellten Zertifikaten identisch sein.
* Country(C) und State (ST) müssen bei CA und erstellten Zertifikaten identisch sein.
* Ort ist optional
* Ort ist optional
* Email Adress 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.
* 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".
* 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".
Zeile 120: Zeile 122:
Die Certification Authority wird mit folgendem Befehl erzeugt (Gültigkeit der CA: 10Jahre - 3650 days):
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
  openssl req -new -x509 -extensions v3_ca -keyout privatecakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf
Dieser Befehl erzeugt:
* '''''/etc/ssl/CA/cacert.pem:''''' Root-Zertifikat der CA
* '''''/etc/ssl/CA/private/cakey.pem:'''''
Es sind folgende Eingaben erforderlich (siehe auch [[Debian_OpenSSL#Wichtige Anmerkungen|→ hier]]):
* Passphrase (2x). Schützt den CA-key (private/cakey.pem) vor unberechtigter Nutzung. Dieses Passwort ist später erforderlich, um Zertifikate zu signieren.
* O: z.B. Private CA
* OU: z.B. CA Administration
* Email Adress: z.B. leer
* L: z.B. Other
* ST: z.B. Bavaria
* C: z.B. DE
* CN: z.B. domain_Root_CA
Zum Importieren in den Clients (Webbrowser, Mailprogramm), solte das Root-CA-Zertifikat unter einem anderen Namen (und vor allem Dateiendung) abgespeichert werden:
cp cacert.pem MeinRootCA.crt
=Server-Zertifikat erstellen=
Im folgenden wird ein Serverzertifikat erstellt, das für einen Web- oder Mailserverver verwendet werden kann.
==Certificate Signing Request==
Der CSR enthält alle wesentlichen Angaben zum Zertifikat, das dann im zweiten Schritt mit eben angelegter CA signiert wird.
openssl req -new -nodes -out req.pem -config ./openssl.cf
Dieser Befehl erzeugt:
* '''''/etc/ssl/CA/req.pem:''''' Zertifikats Request
* '''''/etc/ssl/CA/key.pem:''''' privater Schlüssel für das Zertifikat
Es sind folgende Eingaben erforderlich (siehe auch [[Debian_OpenSSL#Wichtige Anmerkungen|→ hier]]):
* Passphrase (2x). Schützt den Schlüssel (key.pem) vor unberechtigter Nutzung.
* O: z.B. Private
* OU: z.B. Server Administration
* Email Adress: z.B. leer
* L: z.B. Other
* ST: z.B. Bavaria
* C: z.B. DE
* CN: z.B. domain.org bzw. *.domain.org um ein sog. Wildcardzertifikat zu erzeugen, das für sämtliche Subdomains von domain.org gültig ist.
==Zertifikat signieren==
Damit das Zertifikat gültig wird, muss es von einer CA signiert werden. Der eben erzeugte Zertifikate Request kann von einer kommerziellen CA, oder von unserer eigenen CA signiert werden. Hier wird das Zertifikat von der oben angelegten CA signiert.
openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
Zum Signieren sind noch folgende Angaben erforderlich:
* Passwort des CA-Keys (siehe [[Debian_OpenSSL#CA erstellen|→ hier]])
* Sign the certificate? [y/n]: y
* 1 out of 1 certificate requests certified, commit? [y/n]: y
Dadurch wird schließlich das gültige Zertifikat /etc/ssl/CA/cert.pem und zusätzlich eine Kopie in /etc/ssl/CA/newcerts/xy.pem (xy: Serialnummer des erzeugten Zertifikats)
==Zertifikat und Key==
Zusätzlich besteht die Möglichkeit, Key und Zertifikat in einem gemeinsamen File "zu verheiraten". Je nach Anwendung (z.B. Apache oder Mailserver) kann es vorteilhaft/erforderlich sein, Key und Zertifikat in zwei getrennten Files (Cyrus, Apache) oder in einem gemeinsamen File (Apache) zur Verfügng zu stellen. Mit folgendem Befehl wird Key und Zertifikat im File /etc/ssl/CA/key-cert.pem generiert:
cat key.pem cert.pem >key-cert.pem
=Zertifikat im Client importieren=
==Root-CA Zertifikat verteilen==
Damit die Clients das selbstsignierte Zertifikat identifizieren können und dieses als vertrauenswürdig anerkennen, muss das Root-CA-Zertifikat (MeinRootCa.crt) in den Client Programmen importiert werden.
Dies kann auf vielfältige Art und Weise geschehen:
* Eine besonders elegante Möglichkeit das Root-CA-Zertifikat den Clients zur Verfügung zu stellen, besteht darin, dieses als Download auf einem Webserver zur Verfügung zu stellen. Z.b. cp MeinRootCA.crt /var/www/
* via FTP-Server
* per Mailversand
* WinSCP
==Mozilla Firefox und Thunderbird==
* Einstellungsdialog öffnen
* Tab '''Erweitert'''
* Button '''Zertifikate anzeigen'''
* Tab '''Zertifizierungsstellen'''
:[[Bild:Zertifikat-Manager.png]]
* Button '''Importieren''' auswählen
* Das auf den Client übertragene Root-CA-Zertifikat (MeinRootCA.crt) auswählen und bestätigen.
{{Hinweis| Falls im Tab '''Server''' bereits Server-Zertifikate mit der Domain (CN) des selbstsignierten Zertifikates vorhanden sind, sollten diese nun gelöscht werden. Das selbstsignierte Zertifikat wird durch den Import des Root-CA Zertifikats als vertrauenswürdig erkannt.}}

Version vom 6. Oktober 2010, 21:57 Uhr

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)
  * Email Adress
  * CN (Common Name) 
  • Country(C) und State (ST) müssen bei CA und erstellten Zertifikaten identisch sein.
  • Ort ist optional
  • Email Adress 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

Dieser Befehl erzeugt:

  • /etc/ssl/CA/cacert.pem: Root-Zertifikat der CA
  • /etc/ssl/CA/private/cakey.pem:

Es sind folgende Eingaben erforderlich (siehe auch → hier):

  • Passphrase (2x). Schützt den CA-key (private/cakey.pem) vor unberechtigter Nutzung. Dieses Passwort ist später erforderlich, um Zertifikate zu signieren.
  • O: z.B. Private CA
  • OU: z.B. CA Administration
  • Email Adress: z.B. leer
  • L: z.B. Other
  • ST: z.B. Bavaria
  • C: z.B. DE
  • CN: z.B. domain_Root_CA

Zum Importieren in den Clients (Webbrowser, Mailprogramm), solte das Root-CA-Zertifikat unter einem anderen Namen (und vor allem Dateiendung) abgespeichert werden:

cp cacert.pem MeinRootCA.crt


Server-Zertifikat erstellen

Im folgenden wird ein Serverzertifikat erstellt, das für einen Web- oder Mailserverver verwendet werden kann.

Certificate Signing Request

Der CSR enthält alle wesentlichen Angaben zum Zertifikat, das dann im zweiten Schritt mit eben angelegter CA signiert wird.

openssl req -new -nodes -out req.pem -config ./openssl.cf

Dieser Befehl erzeugt:

  • /etc/ssl/CA/req.pem: Zertifikats Request
  • /etc/ssl/CA/key.pem: privater Schlüssel für das Zertifikat

Es sind folgende Eingaben erforderlich (siehe auch → hier):

  • Passphrase (2x). Schützt den Schlüssel (key.pem) vor unberechtigter Nutzung.
  • O: z.B. Private
  • OU: z.B. Server Administration
  • Email Adress: z.B. leer
  • L: z.B. Other
  • ST: z.B. Bavaria
  • C: z.B. DE
  • CN: z.B. domain.org bzw. *.domain.org um ein sog. Wildcardzertifikat zu erzeugen, das für sämtliche Subdomains von domain.org gültig ist.


Zertifikat signieren

Damit das Zertifikat gültig wird, muss es von einer CA signiert werden. Der eben erzeugte Zertifikate Request kann von einer kommerziellen CA, oder von unserer eigenen CA signiert werden. Hier wird das Zertifikat von der oben angelegten CA signiert.

openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem

Zum Signieren sind noch folgende Angaben erforderlich:

  • Passwort des CA-Keys (siehe → hier)
  • Sign the certificate? [y/n]: y
  • 1 out of 1 certificate requests certified, commit? [y/n]: y

Dadurch wird schließlich das gültige Zertifikat /etc/ssl/CA/cert.pem und zusätzlich eine Kopie in /etc/ssl/CA/newcerts/xy.pem (xy: Serialnummer des erzeugten Zertifikats)


Zertifikat und Key

Zusätzlich besteht die Möglichkeit, Key und Zertifikat in einem gemeinsamen File "zu verheiraten". Je nach Anwendung (z.B. Apache oder Mailserver) kann es vorteilhaft/erforderlich sein, Key und Zertifikat in zwei getrennten Files (Cyrus, Apache) oder in einem gemeinsamen File (Apache) zur Verfügng zu stellen. Mit folgendem Befehl wird Key und Zertifikat im File /etc/ssl/CA/key-cert.pem generiert:

cat key.pem cert.pem >key-cert.pem


Zertifikat im Client importieren

Root-CA Zertifikat verteilen

Damit die Clients das selbstsignierte Zertifikat identifizieren können und dieses als vertrauenswürdig anerkennen, muss das Root-CA-Zertifikat (MeinRootCa.crt) in den Client Programmen importiert werden. Dies kann auf vielfältige Art und Weise geschehen:

  • Eine besonders elegante Möglichkeit das Root-CA-Zertifikat den Clients zur Verfügung zu stellen, besteht darin, dieses als Download auf einem Webserver zur Verfügung zu stellen. Z.b. cp MeinRootCA.crt /var/www/
  • via FTP-Server
  • per Mailversand
  • WinSCP


Mozilla Firefox und Thunderbird

  • Einstellungsdialog öffnen
  • Tab Erweitert
  • Button Zertifikate anzeigen
  • Tab Zertifizierungsstellen
Zertifikat-Manager.png
  • Button Importieren auswählen
  • Das auf den Client übertragene Root-CA-Zertifikat (MeinRootCA.crt) auswählen und bestätigen.


Bulbgraph.png Hinweis:
Falls im Tab Server bereits Server-Zertifikate mit der Domain (CN) des selbstsignierten Zertifikates vorhanden sind, sollten diese nun gelöscht werden. Das selbstsignierte Zertifikat wird durch den Import des Root-CA Zertifikats als vertrauenswürdig erkannt.