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

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>;

}
Wenn dir dieser Post gefallen hat, teile ihn doch auf Social Media, abonniere und verfolge mich per E-Mail, RSS-Feed, Social Media oder registriere dich auf meiner Seite. Wenn du registriert bist, like den Post bitte, wenn er dir gefallen hat!