Sicherheit

Selbst signiertes ssl Zertifikat
Verschluesselte Datenuebertragung fuer Webmail

Intro:
Normaler Datenverkehr im Internet ist unverschluesselt. Jede, die know how und das richtige Tool hat koennte diese Daten mitlesen. Normalerweise stellt dies kein Problem dar. Problematisch wird der Fall erst, wenn es sich um sensible Daten handelt, etwa um Onlinebanking – oder eben Mails. Der Secure Socket Layer wird bei einem ssl zertifizierten Server genutzt, um die Daten zwischen dem Server und dem Client Webbrowser zu verschluesseln.
SSL nutzt zur Verschluesselung ein duales System, bestehend aus einem oeffentlichen und einem privaten Schluessel. Alles was auf Serverseite mit dem privaten Schluessel verschluesselt wurde kann nur mit dem uebermittelten, oeffentlichen Schluessel auf Clientseite entschluesselt werden. Damit wird sichergestellt, das alle Daten tatsaechlich nur von Serverseite kommen. Man nennt dieses Verfahren asymmetrische Kryptographie.
Die Anerkennung eines Zertifikats durch eine autorisierte Stelle (CA) versichert, dass der Zertifikatshalter tatsaechlich derjenige ist, fuer den er (oder sie) sich ausgibt. Da das Signieren eines Zertifikates bei einer autorisierten Stelle teuer ist, kann mit openssl toolkit ein selbstsigniertes Zertifikat erstellt werden.

Mit Dank an:
http://www.werthmoeller.de/doc/microhowtos/openssl/
http://www.verisign.de/index.html
http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure

1. Einen privaten Schluessel generieren
Als erster Schritt wird ein RSA privater Schluessel erstellt. Er wird mit 1024 bit verschluesslt und in einem PEM Format gespeichert, womit er als ASCII Text lesbar ist.

openssl genrsa -des3 -out server.key 1024

2. Erstellen des CSR (Certificate Signing Request)

Das Erstellen der CSA (Anforderung einer Signatur) kann zu zwei Zwecken genutzt warden. Einmal kann es zu einer anerkannten Zertifizierungsstelle, wie etwa Thawte oder Verisign geschickt werden, damit diese das CSA verifiziert und signiert, oder man kann das CSR selbst signieren.
Waehrend das CSA generiert wird, werden einige Fragen gestellt, die so genannten X.509 Eigenschaften des Zertifikats. Es ist wichtig, bei der Anfrage des Common Name den vollen Namen des zu zertifizierenden Servers anzugeben. Also z.B.: mail.mein_meinserver.de.

openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [GB]:DE
State or Province Name (full name) [Berkshire]:Germany
Locality Name (eg, city) [Newbury]:Hamburg
Organization Name (eg, company) [My Company Ltd]:NetzKoop
Organizational Unit Name (eg, section) []:NetzKoop
Common Name (eg, your name or your server's hostname) []:mail.mein_mailserver.de
Email Address []:admin[a]mein_mailserver.de
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3. Die Passphrase aus dem Key loeschen:

Um zu verhindern, dass apache jedes Mal, wenn er gestartet wird, die Passphrase abruft, wird die Verschluesselung vom Key selbst entfernt.

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

Der neue Server-key hat keine Passphrase mehr in sich.

-rw-r--r-- 1 root root 745 Jun 29 12:19 server.csr
-rw-r--r-- 1 root root 891 Jun 29 13:22 server.key
-rw-r--r-- 1 root root 963 Jun 29 13:22 server.key.org

4. Ein selbst signiertes Zertifikat erstellen:

Ein selbst erzeugtes Zertifikat wird im Clientbrowser eine Fehlermeldung generieren, die den User auffordert, das Zertifikat anzuerkennen obwohl dieses Zertifikat nicht von einer oeffentlichen Stelle anerkannt wurde und nicht vertrauenswuerdig ist
Um ein Zertifikat zu erstellen, das 365 Tage gueltig ist wird folgender Befehl eingegeben:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

5. Die Installation des privaten Schluessels und des Zertifikats:

cp setc/apache2/ssl/ssl.crt
cp server.key /etc/apache2/ssl/ssl.key

6. Konfiguration in der Virtuellen Hosts Datei

SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key

7. Den Apache neu starten:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start