OpenSSL

Aus Wiki
Version vom 28. Februar 2009, 13:04 Uhr von Erich (Diskussion | Beiträge) (Die Seite wurde neu angelegt: == Generelle Info == Wenn die NSLU aus dem Internet erreichbar sein soll, und Passwörter oder sonstige sensible Daten übertragen werden sollen, empfiehlt es sich die...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Generelle Info

Wenn die NSLU aus dem Internet erreichbar sein soll, und Passwörter oder sonstige sensible Daten übertragen werden sollen, empfiehlt es sich dies per SSL-Verschlüsselung zu erledigen, um ein evtl. Abhören der Informationen zu vermeiden. Der Webserver Apache (und zahlreiche andere auch), sowie Mailserver wie Postfix und Cyrus Imapd bringen Support für SSL-Verschlüsselung von Haus aus bereits mit. Dies ist besonders empfehlenswert für Webanwendungen wie z.B. → Webmail, da hier ansonsten Passwörter im Klartext durchs Internet gehen würden.


Installation

Das Paket OpenSSL sorgt für die SSL-Verschlüsselung. Falls OpenSSH installiert wurde, ist dieses Paket bereits installiert, da für OpenSSH das OpenSSL-Paket automatisch mit installiert wird. Falls OpenSSL nicht installiert ist:

ipkg update
ipkg install openssl 

Erzeugung der Zertifikate

SSL-Verschlüsselung basiert auf Zertifikaten. Diese Zertifikate müssen erst angelegt und mit Installationsspezifischen Daten gefüllt werden. Im folgenden werden sog. "Selfsigned Certificates" verwendet. D.h. Die erzeugten Zertifikate werden selbst Unterschrieben. Solche Zertifikate werden von den Webbrowsern "angemeckert", da sie gefälscht sein könnten. Vertrauenswürdige, von einer Zertifizierungsstelle wie Verisign authentifizierte Zertifikate sind allerdings kostenpflichtig (meist jährliche Gebühr). Für einen privaten Webserver oder Mailserver ist dies allerdings absolut nicht nötig. Selbstsignierte Zertifikate erfüllen hier ihren Zweck. Wichtige Anmerkungen


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) 

Im folgenden werden die Schlüssel und Zertifikate für die eigene "Zertifizierungsstelle" (CA) angelegt. Die Zertifikate für Webserver und/oder Mailserver werden dann in den entsprechenden Kapiteln beschrieben. Zu beachten ist, dass der Common Name, Organisation und Organisational Unit jeweils unterschiedlich bei CA und Server gewählt werden. Ansonsten kann es zu Problemen kommen, die bis dahin reichen, dass das erstellen der Zertifikate mit einem kryptischen Fehler abbricht.

Die Zertifikate haben - im Gegensatz zu den Keys - eine begrenzete Gültigkeitsdauer. Diese beträgt standardmäßig 365 Tage. D.h. Das Zertifikat wird nach einem Jahr ungültig und muß neu erstellt werden. Die Gültigkeit kann allerdings mit Hilfe des Parameters -days auf einen beliebigen Wert gesetzt werden.

Die Keys und Zertifikate haben ein Passwort zum Schutz vor fremden Zugriff. Für eine Serveranwendung ist dieser Schutz leider etwas hinderlich, da erst das Passwort eingegeben werden müßte, bevor der jeweilige Server komplett starten würde. Deshalb wird hier der Passwortschutz von den Zertifiakten entfernt. D.h. wenn ein Fremder die Zertifikate in die Hände bekommen würde, könnte er evtl. die Kommunikation zwischen Server und Webbrowser belauschen.


Vorbereitung:

cd /opt/etc/
mkdir ssl
cd ssl
mkdir ca
mkdir key
mkdir cert

Generierung der CA:

Hiermit wird die eigene CA (Certification Authority) eingerichtet, um die jeweiligen Server-Key's später selbst zu signieren.

cd ca
openssl genrsa -des3 -out ca.key 1024

Entfernen des Passworts vom Key und setzen der Rechte:

mv ca.key ca.key.orig
openssl rsa -in ca.key.orig -out ca.key
chmod 600 ca.key

Signierung der CA:

Selbst Signiertes Zertifikat anlegen (evtl. -days 365 erföhen, um das Zertifikat länger gültig zu machen):

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Folgende Eingaben sind notwendig (Bitte Organization Name und -Unit sowie Common Name abändern → Anmerkungen beachten:

Country Name: de
State or Province Name: de
Locality Name: .
Organization Name: demo CA
Organizational Unit Name: CA Department
Common Name: CA
Email Address: .

Anlegen Signierungs-Script

vi ca.config

Folgende Zeilen einfügen und speichern (evtl. den Eintrag default_days anpassen, der die Gültigkeit des Zertifikates vorgibt):

[ ca ]
default_ca              = CA_own
[ CA_own ]
dir                     = .
certs                   = $dir
new_certs_dir           = $dir/ca.db.certs
database                = $dir/ca.db.index
serial                  = $dir/ca.db.serial
RANDFILE                = $dir/ca.db.rand
certificate             = $dir/ca.crt
private_key             = $dir/ca.key
unique_subject          = no
default_days            = 365
default_crl_days        = 30
default_md              = md5
preserve                = no
policy                  = policy_anything
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

Folgende Befehle eingeben:

mkdir -p ca.db.certs 
touch ca.db.rand
touch ca.db.index
Achtung: Folgenden Befehl nur ausführen, wenn die Datei 'ca.db.serial' noch NICHT existiert (evtl. mit ls checken)
echo '01' >ca.db.serial