Bisher habe ich beschrieben wie wir Zertifikate von Let’s Encrypt für Apache2 einrichten. In diesem Artikel zeige ich euch wie Simpel dies auch bei dem NGINX Webserver zu lösen ist.
Als Basis nutzen wir einen NGINX Webserver mit PHP7-FPM.

In diesem Artikel nutze ich als Domain Fragz.de und www.fragz.de. Bitte ergänzt es durch eure Domain/s.

Fall noch nicht geschehen, installiere „git“

aptitude install git

jetzt laden den den Quellcode von Let’s Encrypt herunter

git clone https://github.com/letsencrypt/letsencrypt

Wechsel jetzt in das Verzeichnis „letsencrypt“ und starte den Client

cd letsencrypt
./letsencrypt-auto certonly --standalone -d www.fragz.de

certonly, damit laden wir nur das Zertifikat runter und konfigurieren die vHost später selber.
Mit –-standalone geben wir an, dass temporär ein Webserver zur Validierung gestartet werden kann und soll.
-d example.de gibt die Domain an für die das Zertifikat erstellt werden soll

Du kannst aber auch mehrere Domains angeben. Dazu setzen wir hinten -d domain.de an

./letsencrypt-auto certonly --standalone -d www.fragz.de -d fragz.de

Die Installation von Let’s Encrypt ist eigentlich selbsterklärend. Daher werde ich in diesem Artikel nicht weiter drauf eingehen. Sollten dennoch Fragen auftauchen, gerne hier als Kommentar oder im Forum unter Forum.

Unsere Zertifikate wurden im Ordner /etc/letsencrypt/live/www.fragz.de/ abgelegt. Wir Öffnen nun die Konfigurationsdatei von unserem NGINX Webserver. In unserem Fall wäre es die /etc/nginx/sites-enabled/fragz.

Hier ändern wie listen 80 auf listen 443

Im ersten Block fügen wir noch folgende Zeilen hinzu. Dies bindet unsere Zertifikate für die Domain fragz.de ein

ssl_certificate /etc/letsencrypt/live/www.fragz.de/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.fragz.de/privkey.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

Jetzt können wir unseren NGINX Webserver neustarten

/etc/init.d/nginx start

Hier noch mal meine komplette NGINX Config.

server {
	server_name www.fragz.de fragz.de;
	listen 443 ssl;
        port_in_redirect off;
	
	if ($http_host !~* "^www\.fragz\.de$"){
		set $rule_0 1;
	}
	if ($rule_0 = "1"){
		rewrite ^/(.*)$ https://www.fragz.de$1 permanent;
	}

	access_log   /var/log/nginx/fragz.access.log;
	error_log    /var/log/nginx/fragz.error.log error;

	ssl_certificate /etc/letsencrypt/live/www.fragz.de/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.fragz.de/privkey.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

	root /var/www/fragz/;
	index index.php;

	location / {
		try_files $uri $uri/ /index.php?$args;
	}

	location ~ /.well-known {
                allow all;
        }

	location ~ \.php$ {
 		fastcgi_split_path_info ^(.+\.php)(/.+)$;
 		include fastcgi_params;
 		try_files $uri =404;
 		fastcgi_param PHP_VALUE "upload_max_filesize = 36M";
 		fastcgi_param PHP_VALUE "post_max_size=37M";
		fastcgi_split_path_info ^(.+\.php)(.*)$;
 		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 		fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 		fastcgi_pass unix:/run/php/php7.1-fpm.sock;
 		fastcgi_connect_timeout 60;
 		fastcgi_index index.php;
 	}

}

server {
    listen 80;
    server_name fragz.de www.fragz.de;
    return 301 https://$host$request_uri;
}

Übrigens: Der letzte Server Block sagt dem NGINX Webserver das er bei Aufruf ohne https auf SSl umleiten soll.

 

Quelle: https://www.fragz.de