Einrichtung von SSL (HTTPS) auf einem dedizierten Server:



Einleitung:


SSL (Secure Socket Layer) dient dazu, auf sichere Art und Weise die zwischen zwei Rechnern ausgetauschten Informationen zu verschlüsseln. Auf Ihrem dedizierten Server kann es sinnvoll sein SSL zu verwenden um sensible Informationen zu schützen.


Vorgehensweise:


Bevor Sie ein SSL Zertifikat erstellen/aktivieren können müssen Sie zuerst prüfen ob die Option auf Ihrer Maschine auch aktiviert ist. Apache wird standardmässig mit SSL kompiliert, man muss nur angeben dass er es beim Start berücksichtigen soll. Anschliessend können Sie entweder ein offizielles Zertifikat erwerben oder ein eigenes Zertifikat erstellen.

Ein von Ihnen selbst erstelltes Zertifikat wird zwar eine Fehlermeldung provozieren, dies verringert jedoch nicht die durch ein Zertifikat gewonnene Sicherheit.


Aktivierung von SSL für eine erste Webseite:


Achtung! Die beschriebene Vorgehensweise bezieht sich auf ein RedHat System!


Per SSH:


Der normale Webserver (HTTP) funktioniert mit Port 80, der Server im SSL Modus mit Port 443. Wir überprüfen also zuerst ob Apache bereits auf diesem Port lauscht:

[root@crashtest root]# netstat -tanpu | grep ":443"
[root@crashtest root]#


Kein Ergebnis. Der Server ist also noch nicht für SSL aktiviert; es genügt dann folgende Option auszukommentieren:

[root@crashtest root]# pico /etc/sysconfig/apache


Um es auszukommentieren entfernen wir das # vor der gewünschten Option:

# Uncomment to active SSL
OPTIONS="-DSSL"


Wir speichern die Datei mit 'Ctrl+x' und 'Y' gefolgt von 'Enter' und starten dann Apache neu um die Änderungen zu übernehmen.

[root@crashtest root]# /etc/init.d/httpd restart
Arrêt de httpd : [ OK ]
Démarrage de httpd : [ OK ]
[root@crashtest root]#


Wenn wir nun nochmals den Port 443 überprüfen sehen wir das Apache nun auf dem Port lauscht:

[root@crashtest root]# netstat -tanpu | grep ":443"
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3291/httpd



Sicherheit:


Dies ist äusserst wichtig. Es existiert eine sehr einfach auszunutzende Sicherheitslücke in allen Versionen von OpenSSL < 0.9.6k. Es müssen unbedingt die Sicherheitspatches von OVH angewendet werden bevor die Maschine online geht. Ansonsten wird Ihr Server innerhalb kürzester Zeit gehackt (es werden unzählige Netzwerkscans von Hackern durchgeführt um betroffenen Maschinen zu finden). Um zu sehen welche Version Sie haben:

[root@crashtest root]# rpm -qa | grep ssl


Sie bekommen eine Ausgabe in folgender Form:

openssl-devel-0.9.6k-1
openssl-0.9.6k-1
openssl-perl-0.9.6k-1


Wenn Sie eine ältere Version als die hier angezeigten verwenden (zum Beispiel openssl-0.9.6i) dann ist das nicht OK. Schliessen Sie den Port 443 und führen Sie die Patches aus. Eine Hilfe dazu finden Sie hier: http://hilfe.ovh.de/ReleaseSicherheitsPatch


Zertifikat:


Nun da der SSL Support aktiviert und erreichbar ist benötigen wir ein SSL Zertifikat. Sie können eines kaufen (zum Beispiel hier: http://www.tbs-internet.com/thawte/ oder ein eigenes Zertifikat erstellen wie im Folgenden beschrieben.


Per SSH

Begeben Sie sich in den Ordner mit den SSL Schlüsseln, wo sich bereits einige andere SSL Schlüssel befinden sollten

[root@crashtest root]# cd /usr/local/apache/conf/ssl.key


und erstellen Sie Ihren Schlüssel mit folgendem Befehl (Sie müssen natürlich amplirikal.com durch die Domain ersetzen für die Sie ein Zertifikat installieren möchten):

[root@crashtest ssl.key]# openssl genrsa 1024 > amplirikal.com.key


Sie können die Datei absichern indem Sie ein chmod 400 durchführen:

[root@crashtest ssl.key]# chmod -c 400 amplirikal.com.key


Nun füllen wir die Zertifikatsabfrage (CSR) durch und beantworten die dabei gestellten Fragen:

[root@crashtest ssl.key]# openssl req -new -key amplirikal.com.key > amplirikal.com.csr
Using configuration from /usr/share/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) Some-State:LILLE
Locality Name (eg, city) []:LILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]:amplirikal.com


und signieren das Zertifikat:

[root@crashtest ssl.key]# openssl x509 -req -days 365 -in amplirikal.com.csr -signkey amplirikal.com.key -out amplirikal.com.crt
Signature ok
subject=/C=FR/ST=LILLE/L=LILLE/O=amplirikal.com/OU=photos/CN=Trinity/Email=raven@united-irc.org
Getting Private key
[root@crashtest ssl.key]#


Nun müssen noch die Dateien in die richtigen Ordner platziert werden:

[root@crashtest root]# mv /usr/local/apache/conf/ssl.key/amplirikal.com.crt /usr/local/apache/conf/ssl.crt
[root@crashtest root]# mv /usr/local/apache/conf/ssl.key/amplirikal.com.csr /usr/local/apache/conf/ssl.csr


und unser Zertifikat ist fertig.


Konfiguration von Apache:


Editieren wir nun - immer noch per SSH - unsere Datei httpd.conf:

[root@crashtest root]# pico /httpd.conf


Suchen Sie den ersten Abschnitt und prüfen Sie ob der SSL Support aktiviert ist:

##
## SSL Support
##
## When we also provide SSL we have to listen to the
## standard HTTP port (see above) and to the HTTPS port
##

Listen 80
Listen 443
</IfDefine>


Im zweiten Abschnitt bei "NameVirtualHost" fügen wir die IP mit dem Port 443 hinzu.

#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
NameVirtualHost 213.186.37.141:80
NameVirtualHost 213.186.37.141:443


Gehen Sie dann zum dritten Abschnitt und ändern Sie den default Virtual Host um Ihr Zertifikat einzufügen. Achtung, im nächsten Abschnitt haben wir die kommentierten zeilen gekürzt damit es nicht zu lang ist. Ändern Sie diese Zeilen in Ihrer Datei NICHT (!) sondern nur die hier angegebenen Zeilen.

<IfDefine SSL>
<VirtualHost _default_:443>
#General setup for the virtual host
DocumentRoot "/home/ampli/www"
ServerName crashtest.united-irc.com
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
#SSL Engine Switch:
#Enable/Disable SSL for this virtual host.
SSLEngine on
#Server Certificate:
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
#Server Private Key:
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key


Wir haben nun angegeben wo das Zertifikat liegt. Nun muss noch der Virtual Host für die Seite hinzugefügt werden. Unser Virtual Host muss sich zwischen <If Define SSL> und </If Define> befinden.

<VirtualHost 213.186.37.141:443>
DocumentRoot "/home/ampli/www"
ServerName amplirikal.com
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key
<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfDefine>


Wir verlassen nun httpd.conf mit 'Ctrl+x', bestätigen die Änderungen und starten Apache neu:

[root@crashtest www]# /etc/init.d/httpd restart
Arrêt de httpd : [ OK ]
Démarrage de httpd : [ OK ]
[root@crashtest www]#



Hinzufügen einer zusätzlichen Domain:


Sie können eine zusätzliche Domain hizufügen indem Sie einfach nach dem ersten </VirtualHost> (und vor </IFDefine>) den Bereich VirtualHost? für die zusätzliche Domain abändern:

<VirtualHost 213.186.37.141:443>
DocumentRoot "/home/loboto/www"
ServerName lobotomotiv.org
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key
<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*"
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</VirtualHost>



Zusammenfassung:


Wenn Sie alles richtig gemacht haben können Sie nun Ihre Seiten über HTTPS abrufen. Denken Sie daran dass eine Warnung angezeigt werden wird wenn Sie das Zertifikat selbst erstellt haben und dass für alle Domains EIN EINZIGES Zertifikat verwendet wird. Wie im folgenden Konfigurationsbeispiel werden alle in der Sektion "VirtualHost" hinzugefügten Domains mit dem zu Anfang generierten Zertifikat antworten.