Es wird immer wichtiger, dass man Daten nicht einfach so durchs Netz schickt, sondern die Daten verschlüsselt transportiert. Die Lösung ist ein apache, mit ssl und verschiedenen virtuellen hosts. Meine Grundidee ist folgende: schnell und einfach https://<dienstname>:<port> zu implementieren. Dazu braucht es natürlich erstmal eine funktionierende apache Installation. Aber das erkläre ich hier sicher nicht! Und wir gehen noch davon aus, dass wir nicht den Standard Port 443 nehmen wollen, sondern einen beliebigen. Das Ziel ist ja mehrere Seiten/ Dienste zu erstellen.
Zuerst kümmern wir uns um die Zertifikate:
- sucht euch einen beliebigen Ort, z.B. /tmp/test um dort die Zertifikate zu erstellen und erstmal zu speichern
- und los gehts:
$ sudo openssl genrsa -des3 -out <name>-ssl-cert-private.key 1024
ihr müsst nichts eingeben, außer dem Passwort und das natürlich gut merken!
- ok, dann nehmen wir den erstellten Key und erstellen ein ‘certificate request’:
$ sudo openssl req -new -key <name>-ssl-cert-private.key -out <name>-ssl-cert-file.pem
- und jetzt erstellen wir noch das selbst-signierte Zertifikat:
$ sudo openssl x509 -req -days 365 -in <name>-ssl-cert-file.pem -signkey <name>-ssl-cert-private.key -out <name>-ssl-server.crt
- jetzt müssen die Zertifikate an den richtigen Ort kopiert werden:
$ sudo cp <name>-ssl-server.crt /etc/ssl/certs
$ sudo cp <name>-ssl-cert-private.key /etc/ssl/private
Das wars auch schon fürs Erste.
Apache Konfiguration
- ssl Modul aktivieren:
$ sudo a2enmod ssl
- jetzt müssen die Ports, auf denen der apache lauschen soll konfiguriert werden, dazu in /etc/apache2/ports.conf den Port 443, den wir nicht wollen auskommentieren und die gewünschten Ports hinzufügen:
#nur ein Auszug der Datei <IfModule mod_ssl.c> #Listen 443 Listen 2000 Listen 3000 #und mehr.... oder weniger </IfModule> - und jetzt kopieren wir die default-ssl Seite (Konfigurationsdatei), die wir gleich als virtuellen Host nutzen wollen:
$ sudo cp default-ssl <name>-ssl
- jetzt geht heißt es die Datei richtig zu konfigurieren, hier ein Auszug wie eure Datei aussehen könnte. Beachtet die Kommentare:
<IfModule mod_ssl.c> #nicht vergessen! NameVirtualHost *:3000 <VirtualHost *:3000> #port auch hier nicht vergessen ServerAdmin webmaster@localhost DocumentRoot /var/www/<name>-ssl #den Pfad anpassen <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/<name>-ssl> #den Pfad anpassen Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # ## HIER SIND UNSERE ERSTELLTEN ZERTIFIKATE!!! # SSLCertificateFile /etc/ssl/certs/<name>-ssl-server.crt SSLCertificateKeyFile /etc/ssl/private/<name>-ssl-cert-private.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> - Jetzt die Datei speichern und dann:
$ sudo a2ensite jk-ssl
jetzt den apache neu starten; ihr müsst jetzt natürlich die Passwörter für die Zertifikate eingeben
$ sudo /etc/init.d/apache2 restart
- wenn ihr nur kleine Konfigurationseinstellungen macht, reicht es auch die apache Konfiguration neu zu laden:
$ sudo /etc/init.d/apache2 reload
Ihr habt es geschafft, auf geht’s nach https://<ip|dns>:<port> und alles müsste funktionieren. Eine kleine Anmerkung noch, wenn ihr alle Seiten/ Dienste unter ‘/var/www’ speichert und die default Seite aktiviert ist, solltet ihr in dieser sicherheitshalber ‘-Indexes’ statt Indexes eingeben. Dies ist eig. nicht nötig, aber solltet ihr mal die index.html (in der It works! steht) versehentlich löschen, da ihr denkt, ach die Datei brauche ich ja wirklich nicht. Dann kann man durch einen Aufruf im Browser auch auf eure eig. https basierten Dienste per http zugreifen.
Have fun