Unter dem Eintrag http # SSL Settings folgendes hinzufügen
openssl s_client -connect myprivatenas.duckdns.org:443 -tls1 -tlsextdebug -status
nano /etc/nginx/nginx.conf
#
# Hinzugefügt Start
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
ssl_certificate /etc/letsencrypt/live/myprivatenas.duckdns.org/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/myprivatenas.duckdns.org/privkey.pem;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
# Hinzugefügt Ende
#
nginx -s reload
Headder testen:
curl -s -D- https://myprivatenas.duckdns.org | grep Strict
Als Ausgabe sollte dann das erscheinen.
Strict-Transport-Security: max-age=31536000; includeSubDomains
nano /etc/nginx/conf.d/myprivatenas.duckdns.org.conf
server {
listen 80;
server_name myprivatenas.duckdns.org www.myprivatenas.duckdns.org;
return 301 https://myprivatenas.duckdns.org$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name myprivatenas.duckdns.org www.myprivatenas.duckdns.org;
root /var/www/html;
index index.html;
location / {
proxy_cache on;
proxy_pass http://localhost:8000;
}
nginx -s reload
Zuerst DuckDNS-Docker und Letsencrypt-Docker installieren.
Dann folgende Compose-Datei anlegen:
Wenn noch nicht geschehen, den Hauptordner für die Compose-Dateien erstellen:
sudo mkdir /home/dockervolumes
Nun folgenden Befehl im Terminal eingeben ( Ordner wird erstellt und die *.yml wird dort geöffnet).
sudo mkdir /home/dockervolumes/threecontainers && cd /home/dockervolumes/threecontainers && sudo nano docker-compose.yml
version: '2'
services:
nginx-proxy:
image: nginx:alpine
container_name: nginx-proxy
ports:
- "3200:80"
- "451:443"
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs:ro
network_mode: bridge
docker-gen:
image: jwilder/docker-gen
container_name: nginx-proxy-gen
command: -notify-sighup nginx-proxy -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
volumes_from:
- nginx-proxy
volumes:
- /etc/nginx/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen"
network_mode: bridge
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-proxy-le
volumes_from:
- nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
volumes:
conf:
vhost:
html:
certs:
Speichern mit Strg-x, y, Enter
Quelle: https://github.com/linuxserver/docker-letsencrypt/blob/master/README.md
Anschließend die „yml“ starten mit
docker-compose up -d
! Darauf achten, dass man sich noch im /home/dockervolumes/threecontainers-Verzeichnis befindet.
Das Dockerimage wird heruntergeladen und der Docker mit der eingetragenen Konfiguration gestartet.
SSL funktioniert nicht!!!
Zuerst DuckDns einrichten.
Dann Portfreigabe im Router setzen.
NginX-Docker installieren.
Hierfür benutze ich ein anderes Docker-‚.yml Verzeichnis, als das bei meinen anderen Docker der Fall ist.
sudo mkdir /home/dockervolumes1
Nun folgenden Befehl im Terminal eingeben ( Ordner wird erstellt und die *.yml wird dort geöffnet).
sudo mkdir -p /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/letsencrypt-site && sudo nano /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/docker-compose.yml
Folgendes dort einfügen (vorher Eure Werte überprüfen):
version: '3.1'
services:
letsencrypt-nginx-container:
container_name: 'letsencrypt-nginx-container'
image: nginx:latest
ports:
- "91:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./letsencrypt-site:/usr/share/nginx/html #ACHTUNG! WICHTIG!
networks:
- docker-network
networks:
docker-network:
driver: bridge
STRG-x, y, Enter
sudo nano /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/nginx.conf
server {
listen 80;
listen [::]:80;
server_name knilix-openmediavaultblog.duckdns.org www.knilix-openmediavaultblog.duckdns.org;
location ~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html; #ACHTUNG! WICHTIG!
}
root /usr/share/nginx/html; #ACHTUNG! WICHTIG!
index index.html; #ACHTUNG! WICHTIG! - evtl. erweitern (php)
}
STRG-x, y, Enter
sudo nano /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/letsencrypt-site/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Let's Encrypt First Time Cert Issue Site</title>
</head>
<body>
<h1>Der Testzugang ohne https funktioniert schon einmal!</h1>
<p>
Dies ist die temporäre Site, die nur für den Test verwendet wird, bevor SSL-Zertifikate von Let's Encrypt ausgestellt werden.
</p>
</body>
</html>
STRG-x, y, Enter
cd /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt
sudo docker-compose up -d
Jetzt im Browser folgendes aufrufen (vorher Portfreigabe im Router auf 91:80 setzen):
http://www.knilix-openmediavaultblog.duckdns.org
Hat der Zugang funktioniert, können wir weitermachen.
Certbot-Docker:
Folgenden Befehl mit Euren Werten komplett im Terminal eingeben. Der Certbot-Docker wird installiert.
sudo docker run -it --rm \
-v /docker-volumes/etc/letsencrypt:/etc/letsencrypt \
-v /docker-volumes/var/lib/letsencrypt:/var/lib/letsencrypt \
-v /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/letsencrypt-site:/data/letsencrypt \
-v "/docker-volumes/var/log/letsencrypt:/var/log/letsencrypt" \
certbot/certbot \
certonly --webroot \
--register-unsafely-without-email --agree-tos \
--webroot-path=/data/letsencrypt \
--staging \
-d knilix-openmediavaultblog.duckdns.org -d www.knilix-openmediavaultblog.duckdns.org
Hat das funktioniert und die Ausgabe mit „Congratulations!“ erscheint, können wir weitermachen.
sudo rm -rf /docker-volumes/
Jetzt fordern wir das eigentliche Zertifikat an:
sudo docker run -it --rm \
-v /docker-volumes/etc/letsencrypt:/etc/letsencrypt \
-v /docker-volumes/var/lib/letsencrypt:/var/lib/letsencrypt \
-v /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/letsencrypt-site:/data/letsencrypt \
-v "/docker-volumes/var/log/letsencrypt:/var/log/letsencrypt" \
certbot/certbot \
certonly --webroot \
--email cliff_13@web.de --agree-tos --no-eff-email \
--webroot-path=/data/letsencrypt \
-d knilix-openmediavaultblog.duckdns.org -d www.knilix-openmediavaultblog.duckdns.org
Hat das funktioniert und die Ausgabe mit „Congratulations!“ erscheint, können wir weitermachen.
cd /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt
sudo docker-compose down
Die Produktionsumgebung wird erstellt.
NginX-Docker installieren.
sudo mkdir -p /home/dockervolumes1/letsencrypt-docker-nginx/src/production/production-site && sudo mkdir -p /home/dockervolumes1/letsencrypt-docker-nginx/src/production/dh-param
sudo nano /home/dockervolumes1/letsencrypt-docker-nginx/src/production/docker-compose.yml
version: '3.1'
services:
production-nginx-container:
container_name: 'production-nginx-container'
image: nginx:latest
ports:
- "91:80"
- "450:443"
volumes:
- ./production.conf:/etc/nginx/conf.d/default.conf
- ./production-site:/usr/share/nginx/html
- ./dh-param/dhparam-2048.pem:/etc/ssl/certs/dhparam-2048.pem
- /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/fullchain.pem:/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/fullchain.pem
- /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/privkey.pem:/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/privkey.pem
networks:
- docker-network
networks:
docker-network:
driver: bridge
STRG-x, y, Enter
NginX-konfigurieren.
sudo nano /home/dockervolumes1/letsencrypt-docker-nginx/src/production/production.conf
server {
listen 91;
listen [::]:91;
server_name knilix-openmediavaultblog.duckdns.org www.knilix-openmediavaultblog.duckdns.org;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
#for certbot challenges (renewal process)
location ~ /.well-known/acme-challenge {
allow all;
# root /data/letsencrypt;
root /usr/share/nginx/html;
}
}
#https://knilix.duckdns.org
server {
listen 450 ssl http2;
listen [::]:450 ssl http2;
server_name knilix-openmediavaultblog.duckdns.org;
server_tokens off;
ssl_certificate /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/fullchain.pem;
ssl_certificate_key /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/privkey.pem;
ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
return 301 https://www.knilix-openmediavaultblog.duckdns.org$request_uri;
}
#https://www.knilix-openmediavaultblog.duckdns.org
server {
server_name www.knilix-openmediavaultblog.duckdns.org;
listen 450 ssl http2;
listen [::]:450 ssl http2;
server_tokens off;
ssl on;
ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4;
ssl_certificate /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/fullchain.pem;
ssl_certificate_key /docker-volumes/etc/letsencrypt/live/knilix-openmediavaultblog.duckdns.org/privkey.pem;
root /usr/share/nginx/html;
index index.html;
}
STRG-x, y, Enter
sudo openssl dhparam -out /home/dockervolumes1/letsencrypt-docker-nginx/src/production/dh-param/dhparam-2048.pem 2048
cp /home/dockervolumes1/letsencrypt-docker-nginx/src/letsencrypt/letsencrypt-site/index.html /home/dockervolumes1/letsencrypt-docker-nginx/src/production/production-site/
cd /home/dockervolumes1/letsencrypt-docker-nginx/src/production
sudo docker-compose up -d
Jetzt im Browser folgendes aufrufen (vorher Portfreigabe im Router auf 450:433 setzen):