SSL-Verschlüsselung und HTTPS für Apache 2 oder Nginx Webserver erzwingen

(Last Updated On: 11. Juni 2015)

Bevor Sie diese Schritte nachvollziehen, sollten Sie meinen Einführungspost über die Einrichtung von SSL-Verschlüsselung lesen. Wenn Sie mehrere Domains auf einem einzigen physikalischen Server betreiben, sollten Sie sich außerdem den Post über SNI SSL ansehen.

Apache 2

Lösung über Redirect SSL

Zunächst müssen wir sicherstellen, dass im Apache 2 das SSL-Modul aktiviert ist

sudo a2enmod ssl
sudo a2enmod headers
sudo service apache2 force-reload

Als erstes müssen wir inn der /etc/apache2/ports.conf festlegen, dass der Apache 2 bei aktivierem SSL-modul auf den port 443 (und andere gewüsnchte SSL-ports wie beispielsweise 8443) hören soll.

Listen 80
<IfModule ssl_module>
Listen 443 https
</IfModule>

<IfModule mod_ssl.c>
Listen 443 https
</IfModule>

<IfModule mod_gnutls.c>
Listen 443 https
</Ifmodule>

Dann müssen Sie einmal in der in der /etc/apache2/sites-available/000-default.conf eine VirtaulHost-Direktive für den Port 80 bearbeiten

<VirtualHost *:80>
Servername <FQDN>
Redirect permanent / https://<FQDN>
ServerAdmin <Ihre E-Mail>
#DocumentRoot /var/www (auskommentiert)
</VirtualHost>

dann müssen Sie die /etc/apache2/sites-available/default-ssl.conf (oder falls diese nicht vorhanden in einer neuen Datei namens ssl.conf) editieren

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog &{APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLRequireSSL
SSLCertificateFile /pfad/zum/zertfiikat.pem
SSLCertificateKeyFile /Pfad/zum/Key.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE {17-9]" ssl-unclean-shutdown
</VirtualHost>
Header always set Strict-Transport-Security "mag-age=31536000; includeSubDomains"
</IfModule>

Nach Abschluss der Konfiguration müssen wir noch folgende Befehle eingeben

sudo a2ensite default-ssl
sudo a2ensite (weitere namen von konfigurationsdateien unter /etc/apache2/sites-available)
sudo /etc/init.d/apache2 reload
sudo service apache2 restart

 

Lösung über mod_rewrite

als erstes muss das Apache Modul rewrite zusammen mit dem Modul ssl aktiviert werden.

sudo a2enmod rewrite
sudo a2enmod ssl
sudo service apache2 force-reload

Als erstes müssen wir inn der /etc/apache2/ports.conf festlegen, dass der Apache 2 bei aktivierem SSL-modul auf den port 443 (und andere gewüsnchte SSL-ports wie beispielsweise 8443) hören soll.

Listen 80
<IfModule ssl_module>
Listen 443 https
</IfModule>

<IfModule mod_ssl.c>
Listen 443 https
</IfModule>

<IfModule mod_gnutls.c>
Listen 443 https
</Ifmodule>

Dann müssen Sie einmal in der in der /etc/apache2/sites-available/000-default.conf eine VirtaulHost-Direktive für den Port 80 bearbeiten

<VirtualHost *:80>
Servername <FQDN>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
ServerAdmin <Ihre E-Mail>
#DocumentRoot /var/www (auskommentiert)
</VirtualHost>

dann müssen Sie die /etc/apache2/sites-available/default-ssl.conf (oder falls diese nicht vorhanden in einer neuen Datei namens ssl.conf) editieren

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog &{APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLRequireSSL
SSLCertificateFile /pfad/zum/zertfiikat.pem
SSLCertificateKeyFile /Pfad/zum/Key.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE {17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

Nach Abschluss der Konfiguration müssen wir noch folgende Befehle eingeben

sudo a2ensite default-ssl
sudo a2ensite (weitere namen von konfigurationsdateien unter /etc/apache2/sites-available)
sudo /etc/init.d/apache2 reload
sudo service apache2 restart

Nginx

genau wie der apache2 wird auch Nginx über Module kontrolliert, deren Konfiguration in From von Direktiven in Konfigurationsdatieen festgelegt wird. Die Konfiguration kann wie beim Apache auf mehrere Dateien verteilt sein, die isch normalerweise unter /etc/nginx befinden. Meist gibt es jedoch nur eine einzige Datei mit Namen /etc/nginx/nginx.conf.

Eine erzwungende Weiterelitung auf https:// können Sie auf dem nginx einfach über folgende Direktive festlegen

server {
    listen   80;
    listen   [::]:80;

    server_name <FQDN>

    return 301 https://$server_name$request_uri;
}
server {
    listen   443 default_server ssl;

    server_name <FQDN>;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;
}

Eine schlechtere ÖLsung, die allerdings auch grundsätzlich geht:

server {
listen 80;
listen [::]:80;
listen 443 default ssl;
server_name = <FQDN>;

#if ($ssl_protocol = "") {
#rewrite ^/(.*) https://$server_name/$1 #permanent;
#}
#oder
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
}
}

Eine schlechtere Lösung, die allerdings auch grundsätzlich geht:

server {
listen 80;
listen 443 default ssl;
server_name = <FQDN>;
return 301 https://<FDQN>$request_uri;

ssl_certificate /<pfad>;
ssl_certificate_key /<Pfad>;

eine shlechtere lösung, die allerdigns auch grundsätzlich geht:

server {
listen 80;
listen 443 default ssl;
server_name <FQDN>;
rewrite  ^ https://$server_name$request_uri? permanent;

ssl_certificate /<pfad>;
ssl_certificate_key /<Pfad>;
}

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

DaFRK

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

Das könnte Dich auch interessieren...

3 Antworten

  1. 9. Juni 2015

    […] können Sie Ihren webproxy über http://<IhreDomain>/google/ aufrufen. Wenn Sie jetzt noch den Zugriff über HTTPS einrichten, können Sie ohne Bedenken darauf los […]

  2. 11. Juni 2015

    […] müssen Sie den grundlegenden SSL-Support für den Webservers Ihrer Wahl anschalten. Das habe cih in diesem Post erklärt. Jedoch haben wir in diesem Post SSL-Support für alle Domains mit einem einzigen […]

  3. 11. Juni 2015

    […] guter letzt können Sie jetzt noch erzwingen, dass Nutzer zu Ihrem webserver immer SSL-verschlüsselte Verbindungen aufbauen. Wenn Sie auf dem Webserver desweiteren mehrere Domains bereitstellen wollen, also etwa […]

Kommentar verfassen

This site uses Akismet to reduce spam. Learn how your comment data is processed.