OpenSSL
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
echo '01' >ca.db.serial