Vor kurzem kam ich in die Verlegenheit, wieder mal HTTPS auf einem Apache Webserver einzurichten. Bei der Gelegenheit habe ich mich auch mal wieder dazu eingelesen, was dem aktuellen Stand der Technik entspricht nach den ganzen SSL kritischen Problemen in letzter Zeit. Nachfolgend einfach mal ohne große Erklärung ein vollständiger VHost Eintrag für Weiterleitung von HTTP auf HTTPS mit allen notwendigen SSL Absicherungen. Manch einer ist bestimmt dankbar, wenn er ohne großes Suchen die passende Konfiguration zum kopieren vorfindet.
<VirtualHost *:80> ServerName your.server.de ServerAdmin support@your.server.de DocumentRoot "/var/www/" RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L] ErrorLog "|/usr/bin/cronolog /var/log/apache2/logs/your.server.de/%Y/%m/%d/error.log --symlink=/var/log/apache2/logs/your.server.de/error.log" CustomLog "|/usr/bin/cronolog /var/log/apache2/logs/your.server.de/%Y/%m/%d/access.log --symlink=/var/log/apache2/logs/your.server.de/access.log" combined </VirtualHost> <VirtualHost *:443> ServerName your.server.de ServerAdmin support@your.server.de DocumentRoot "/var/www/" SSLEngine on SSLCertificateFile /etc/apache2/ssl/your.server.de.crt SSLCertificateKeyFile /etc/apache2/ssl/your.server.de.key SSLCertificateChainFile /etc/apache2/ssl/thawte_DV_SSL_CA_-_G2.crt SSLProtocol ALL -SSLv2 -SSLv3 ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH !ECDHE-RSA-DES-CBC3-SHA EDH+aRSA RSA+3DES !aNULL !eNULL !LOW !SEED !CAMELLIA !MD5 !EXP !PSK !SRP !DSS !RC4" SSLHonorCipherOrder On SSLCompression Off SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 Header always set Strict-Transport-Security "max-age=31556926" ErrorLog "|/usr/bin/cronolog /var/log/apache2/logs/your.server.de/%Y/%m/%d/ssl-error.log --symlink=/var/log/apache2/logs/your.server.de/ssl-error.log" CustomLog "|/usr/bin/cronolog /var/log/apache2/logs/your.server.de/%Y/%m/%d/ssl-access.log --symlink=/var/log/apache2/logs/your.server.de/ssl-access.log" combined </VirtualHost>
Zu beachten ist: Ich verwende Cronolog (unter Debian / Ubuntu nachinstallierbar mit apt-get install cronolog) welches täglich ohne weitere Zutun die Logfiles rotiert.
Das Gleiche in Grün nochmal für NGINX 🙂
server {
listen *:80;
server_name your.server.de;
error_log /var/log/nginx/your.server.de/error.log;
access_log /var/log/nginx/your.server.de/access.log;
rewrite ^/(.*)$ https://your.server.de/$1 permanent;
}
server {
listen *:443 ssl;
server_name your.server.de;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/cert/your.server.de.crt;
ssl_certificate_key /etc/nginx/cert/your.server.de.key;
ssl_ciphers „EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 !EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS“;
ssl_prefer_server_ciphers on;
ssl_verify_depth 3;
charset utf-8;
access_log /var/log/nginx/your.server.de/access.ssl.log;
error_log /var/log/nginx/your.server.de/error.ssl.log;
index index.php;
root /var/www/your.server.de/;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ /\. {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
}
}
Danke schön! 😉