EndTest-WP-LE

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):

https://www.knilix-openmediavaultblog.duckdns.org