winlin
Goto Top

Letsencrypt 5 duplicate certs a week

Hallo Zusammen,

ich habe Traefik/Letsencrpyt für meinen nextclouddocker container installiert. Ich habe natürlich bis alles lief einige mal redeployed. Dabei habe ich dann immer die container gelöscht und neu angelegt - ich denke in diesem Schritt habe ich natürlich auch immer wieder die certs die erstellt worden sind neu requestet und daher die max Anzahl pro Woche erreicht.

Was mussich machen wenn ich das umgehen will? Wo liegen die Certs und was muss ich tun bevor ich einen container lösche? ODer reicht es wenn ich im Traefik die acme.json speichere und nach dem neu erstellen einfach wieder mit der vorherigen version ersetze?

Content-ID: 3101590312

Url: https://administrator.de/contentid/3101590312

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

colinardo
colinardo 17.06.2022 aktualisiert um 16:46:49 Uhr
Goto Top
Servus.
Zitat von @winlin:
ich denke in diesem Schritt habe ich natürlich auch immer wieder die certs die erstellt worden sind neu requestet und daher die max Anzahl pro Woche erreicht.
Joa, nicht umsonst macht man Experimente mit Let's Encrypt nur im Staging Environment!!

Was mussich machen wenn ich das umgehen will?
Entweder warten, andere Domain nehmen, oder die erstellten Zertifikate aus dem Container fischen ( meine aus dem Kopf hier /etc/ssl/private)
Wo liegen die Certs und was muss ich tun bevor ich einen container lösche?
Wozu löschen? Einmal richtig machen dann erübrigt sich dauerndes Löschen!

Grüße Uwe
winlin
winlin 17.06.2022 um 17:01:15 Uhr
Goto Top
Ja du hast recht am besten erstmal rausfischen bevor man alles löscht und noch besser erstmal alles richtig Mackenface-smile

Reicht es nicht nur acme.json zu sichern da sind doch alle certs drin oder??? Und das mit dem staging wusste ich nichtface-smile wo definiere ich die Staging url: https://acme-staging-v02.api.letsencrypt.org/directory
colinardo
colinardo 17.06.2022 aktualisiert um 17:37:57 Uhr
Goto Top
Zitat von @winlin:
Reicht es nicht nur acme.json zu sichern da sind doch alle certs drin oder???
In Ruhe lesen und nicht immer gleich aufgeben und Posts schreiben bringt einen am Ende selbst weiter und man lernt davon auch nochwas face-wink ...
storage¶

Required, Default="acme.json"  

The storage option sets the location where your ACME certificates are saved to.
File (YAML)

certificatesResolvers:
  myresolver:
    acme:
      # ...
      storage: acme.json
      # ...

File (TOML)
CLI

ACME certificates are stored in a JSON file that needs to have a 600 file mode.

In Docker you can mount either the JSON file, or the folder containing it:
Und das mit dem staging wusste ich nichtface-smile wo definiere ich die Staging url: https://acme-staging-v02.api.letsencrypt.org/directory

https://doc.traefik.io/traefik/v1.7/configuration/acme/
# CA server to use.
# Uncomment the line to use Let's Encrypt's staging server, 
# leave commented to go to prod.
#
# Optional
# Default: "https://acme-v02.api.letsencrypt.org/directory"  
#
# caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"  
winlin
winlin 17.06.2022 um 17:51:55 Uhr
Goto Top
Ok nun is klar wenn man noch am Testen und rumprobieren ist dann
caServer aktivieren

Wenn man I Production geht dann defaultface-smile

Und das mit der acme.json is dann auch logisch den Pfad wo die liegt einfach außerhalb des Containers ablegen und als zusätzlichen volume mountpoint nehmen. So wird beim redeploy nix neu requester sondern es wird die alte acme genutzt mit den vorhandenen certs
colinardo
colinardo 17.06.2022 aktualisiert um 19:14:31 Uhr
Goto Top
Zitat von @winlin:
Und das mit der acme.json is dann auch logisch den Pfad wo die liegt einfach außerhalb des Containers ablegen und als zusätzlichen volume mountpoint nehmen. So wird beim redeploy nix neu requester sondern es wird die alte acme genutzt mit den vorhandenen certs
Rischtisch.
Und wenn man das Zertifikat/Key mal als Zertifikats-Datei braucht, das lässt sich aus dem Inhalt der json leicht konvertieren, die sind nur base64 kodiert in der json hinterlegt.
jq -r "..Certificates.certificate" ./letsencrypt/acme.json | base64 -d | openssl x509 -out cert.pem  
jq -r "..Certificates.key" ./letsencrypt/acme.json | base64 -d | openssl pkey -out key.pem  
winlin
winlin 17.06.2022 um 19:22:18 Uhr
Goto Top
Ahhh Coool hat mir
Echt gut geholfen. Dankeeeeee

Weißt du eigentlich auch wie ich ein eigenes pem und key file einbinde das ich von NoIP.com habe???
colinardo
colinardo 17.06.2022 aktualisiert um 19:55:18 Uhr
Goto Top
Zitat von @winlin:
Weißt du eigentlich auch wie ich ein eigenes pem und key file einbinde das ich von NoIP.com habe???
Jepp, mounte dein Volume und gebe den Pfad in der yml an https://doc.traefik.io/traefik/https/tls/

docker-compose Inhalte dafür
commands:
  - "--providers.file.filename=/mycerts/certs.yml"  
volumes:
  - "./mycerts:/mycerts"  

Und das "certs.yml" sieht dann so aus
tls:
  certificates:
    - certFile: "/mycerts/cert.pem"  
      keyFile: "/mycerts/key.pem"  
      stores:
        - default
  stores:
    default: {}
winlin
winlin 18.06.2022 um 08:41:46 Uhr
Goto Top
Müsste ich dann in meiner docker compose file für nextcloud den ganzen traefik config löschen?

version: '3.7'  

services:
  db:
    image: mariadb:latest
    container_name: nextcloud-db
    volumes:
      - /home/neno/docker/maria-db/config:/var/lib/mysql
    networks:
      - default
    restart: always
    environment:
      TZ: UTC
      MYSQL_ROOT_PASSWORD: nextcloud
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloud

  redis:
    image: redis:latest
    restart: always
    networks:
      - default
    volumes:
      - /home/neno/docker/redis/config:/var/lib/redis

  nextcloud:
    depends_on:
      - redis
      - db
    image: nextcloud:stable
    container_name: nextcloud
    volumes:
      - /home/neno/docker/nextcloud/config:/var/www/html/config
      - /media/NVMe_1TB/nextcloud/data:/var/www/html/data
    networks:
      - proxy
      - default
    restart: always
    labels:
      - "traefik.enable=true"  
      - "traefik.docker.network=proxy"  
      - "traefik.http.routers.nextcloud-secure.entrypoints=websecure"  
      - "traefik.http.routers.nextcloud-secure.rule=Host(`neno-cloud.duckdns.org`)"  
      - "traefik.http.routers.nextcloud-secure.service=nextcloud-service"  
      - "traefik.http.services.nextcloud-service.loadbalancer.server.port=80"  
    environment:
      REDIS_HOST: redis
      MYSQL_HOST: db:3306
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloud

networks:
  proxy:
    external: true

volumes:
  nextcloud-db-data:
    name: nextcloud-db-data
  redis:
    name: nextcloud-redis
colinardo
colinardo 18.06.2022 aktualisiert um 09:46:01 Uhr
Goto Top
Müsste ich dann in meiner docker compose file für nextcloud den ganzen traefik config löschen?
Hmpf .... Überleg doch einfach mal. TREAFIK spielt den Reverse-Proxy für deine Container, ist also für die Zertifikate dieser zuständig, wenn du nun die Config aus dem Container nimmst weiß der Treafik-Router ja nicht mehr an welchen Container er die Anfragen weiterleiten soll!
Die obige Config gilt für "Traefik" und nur dafür!
Ohne Traefik, also ohne Reverse-Proxy musst du dem Nextcloud Container selbst das Zertifikat verimpfen und dieser ist dann auch direkt die erste Instanz nach extern.
Es gilt also wie immer als erstes das Konzept dahinter zu verstehen und dann darauf aufzubauen. Mit Trial &Error erleidet du da sonst zu 99% Schiffbruch.
Werde dir also erst mal klar darüber was du eigentlich willst.
winlin
winlin 18.06.2022 um 09:59:08 Uhr
Goto Top
Also mein Ziel ist es das ich mein eigenes Zertifikat von noip nutzen und duckdns ersetzen kannface-smile glaube mir ich lese gerade echt viel über alles. Anfangs hatte ich null Ahnung und muss sagen das ich da schon einiges selbstständig hinbekommen habe mit Googleface-smile

Nu das mit den certs da bin ich noch auf Kriegsfußface-smile daher mein post und die Fragenface-smile bitte net übel nehmen. Gebe mein bestes.
colinardo
Lösung colinardo 18.06.2022 aktualisiert um 10:24:14 Uhr
Goto Top
daher mein post und die Fragen
Nur leider passt die hier gar nicht mehr zur Frage des Posts, hier ging es um die Einbindung von Let's Encrypt ...

Das statische Einbinden von Zertifikaten hatte ich ja oben beschrieben, hier ein simples Beispiel des Docker-Files für ein traefik reverse-proxy und als Demo ein "traefik/whoami" als container , die certs.yml hatte ich ja oben schon beschrieben.
version: '3'  

services:
  reverse-proxy:
    image: traefik:latest
    command:
      - "--api.insecure=true"  
      - "--providers.docker"  
      - "--entrypoints.websecure.address=:443"  
      - "--entrypoints.websecure.http.tls.domains=my.domain.tld"  
      - "--providers.file.filename=/certificates/certs.yml"  

    ports:
      - "80:80"  
      - "443:443"  
      - "8080:8080"  
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./certs:/certificates
  whoami:
    image: traefik/whoami
    labels:
      - "traefik.enable=true"  
      - "traefik.http.routers.whoami.rule=Host(`my.domain.tld`)"  
      - "traefik.http.routers.whoami.entrypoints=websecure"  
winlin
winlin 18.06.2022 um 11:14:29 Uhr
Goto Top
Du mal ehrlich hier bekomme ich von dir mehr Hilfe als in anderen nextcloud Foren face-smile

Dankeeeeeee!!!!!