Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
projekte:docker:traefik:start [2022/12/07 10:05] admin |
projekte:docker:traefik:start [2022/12/07 17:09] (aktuell) admin [Eigenes Zertifikat] |
||
|---|---|---|---|
| Zeile 50: | Zeile 50: | ||
| ===== Konfiguration ===== | ===== Konfiguration ===== | ||
| + | |||
| + | Für traefik benutze ich auf meinem NFS drei Verzeichnisse: | ||
| + | mkdir -p / | ||
| + | mkdir / | ||
| + | mkdir / | ||
| + | |||
| + | Im Verzeichnis certs liegen meine Zertifikate die ich selbst für meine interne Domain erstellt habe (siehe unten). | ||
| + | |||
| + | |||
| + | Es gibt jetzt drei Dateien die wir konfigurieren muessen. | ||
| + | - / | ||
| + | - / | ||
| + | - / | ||
| + | |||
| + | ==== compose ==== | ||
| Jetzt braucht man noch eine compose Datei für traefik um es schlussendlich in den Swarm aufzunehmen. Eine Vorlage kann man aus dem Internet laden mit dem Befehl: | Jetzt braucht man noch eine compose Datei für traefik um es schlussendlich in den Swarm aufzunehmen. Eine Vorlage kann man aus dem Internet laden mit dem Befehl: | ||
| Zeile 113: | Zeile 128: | ||
| Traefik hat zwei Arten der Konfiguration, | Traefik hat zwei Arten der Konfiguration, | ||
| - | Für traefik benutze ich auf meinem NFS drei Verzeichnisse: | + | ==== dynamic_conf.yml ==== |
| - | mkdir -p / | + | |
| - | mkdir / | + | |
| - | mkdir / | + | |
| - | + | ||
| - | Im Verzeichnis certs liegen meine Zertifikate die ich selbst für meine interne Domain erstellt habe (siehe unten). | + | |
| Unter conf liegt die dynamische dynamic_conf.yml | Unter conf liegt die dynamische dynamic_conf.yml | ||
| Zeile 166: | Zeile 176: | ||
| customFrameOptionsValue: | customFrameOptionsValue: | ||
| </ | </ | ||
| + | |||
| + | ==== traefik.yml ==== | ||
| Unter data liegt die statische traefik.yml: | Unter data liegt die statische traefik.yml: | ||
| Zeile 214: | Zeile 226: | ||
| Nicht wundern das da schon Port 53 aufgeführt wird. Den hatte ich schon testweise als Entrypoint konfiguriert da ich den nachher für DNS bzw. Pihole brauche. | Nicht wundern das da schon Port 53 aufgeführt wird. Den hatte ich schon testweise als Entrypoint konfiguriert da ich den nachher für DNS bzw. Pihole brauche. | ||
| + | |||
| + | ===== Eigenes Zertifikat ===== | ||
| + | |||
| + | Um unsere Dienste auch verschluesselt zur Verfuegung zu stellen brauchen wir ein Zertifikat. Man kann sich einerseits eines kostenfreies von zum Beispiel Let's Encrypt holen, ein kommerzielles kaufen oder, wie ich es gemacht habe, ein selbsterselltes benutzen. | ||
| + | |||
| + | Das Wahl fiel auf ein selbsterstelltes Zertfikat da ich ein generisches Zertfikat moechte und dieses nur kommerziell fuer richtig Geld verfuegbar ist. Ich haette natuerlich auch mehrere Let's Encrypt Zertifikate verwenden koennen aber das war mir zu viel Aufwand und Arbeit die zu erstellen und zu verwalten. | ||
| + | |||
| + | Normalerweise gibt es eine 1:1 Beziehung zwischen Servername www.beispiel.de und dem Namen der im Zertifikat hinterlegt ist. Wenn das nicht uebrein stimmt gibt es eine Warnung vom Browser, die Verbindung ist zwar nach Bestaetigung trotzdem verschluesselt aber es verunsichert Nutzer. | ||
| + | |||
| + | Da ich diverse Dienste benutze wie apache Webbrowser, traefik, iobroker, pihole usw. wuerde ich auch mehrere Einzelzertifikate benoetigen, daher die Idee ein generisches *.beispiel.domain zu verwenden. Diese gilt fuer alle Namen wie apache.beispiel.domain, | ||
| + | |||
| + | Das Zertfikat und alles was dazu benoetigt wird erstellen wir durch den openssl Befehl auf der Linuk Konsole. Als erstes muessen wir uns eine kurze Konfigurationsdatei erstellen: | ||
| + | < | ||
| + | mkdir ssl-cert | ||
| + | cd ssl-cert | ||
| + | </ | ||
| + | Hier legen wir jetzt eine Datei openssl.ss.cnf an mit folgendem Inhalt: | ||
| + | < | ||
| + | basicConstraints=CA: | ||
| + | subjectAltName=DNS: | ||
| + | extendedKeyUsage=serverAuth | ||
| + | </ | ||
| + | Dann erstellen wir noch ein Skript gen_wildcard.sh mit folgendem Inhalt: | ||
| + | < | ||
| + | echo Erstelle CA Key | ||
| + | openssl genrsa -des3 -out CAPrivate.key 4096 | ||
| + | echo Erstelle CA Cert | ||
| + | openssl req -x509 -new -nodes -key CAPrivate.key -sha256 -days 365 -out CAPrivate.pem | ||
| + | echo Erstelle Domain private Key | ||
| + | openssl genrsa -out beispiel.domain-key.pem 4096 | ||
| + | echo CSR fuer beispiel.domain erzeugen | ||
| + | openssl req -new -key beispiel.domain-key.pem -extensions v3_ca -out beispiel.domain-csr.csr | ||
| + | echo beispiel.domain Certificate erzeugen | ||
| + | openssl x509 -req -in beispiel.domain-csr.csr -CA CAPrivate.pem -CAkey CAPrivate.key -CAcreateserial -extfile openssl.ss.cnf -out beispiel.domain-crt.pem -days 3650 -sha256 | ||
| + | </ | ||
| + | Auf die Einzelheiten der Zertfikatserzeugung gehe ich mal nicht ein da das ein ganzer Artikel waere und man dazu im Internet eigentlich genug Informationen findet. | ||
| + | |||
| + | Die erzeugten Dateien mit dem Zertfikat und dem Private Key muessen nun unter / | ||
| + | |||
| + | |||