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.
Contents
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!
3 Gedanken zu „SSL-Verschlüsselung und HTTPS für Apache 2 oder Nginx Webserver erzwingen“