Lokale Entwicklung
Immer mehr Anwendungen setzten SSL voraus, um richtig zu funktionieren. Die Möglichkeit selbstsignierte Zertifikate zu nutzen kann man in Betracht ziehen, ist aber der Erfahrung nach auch nicht die Lösung, das es viele zusätzliche Probleme bereitet.
Also wäre es gut auch auf einem Entwicklungsrechner mit TLS/SSL zu arbeiten.
NginX Reverse Proxy
Um die lokalen Server mit SSL abzusichern benötigt man nicht viel. Im Grunde braucht man zunächst ein Wildcard Zertifikat. Wenn dieses vorliegt, dann ist die größte Hürde bereits genommen.
Was ihr noch braucht ist Docker, aber das sollte mittlerweile auch auf jedem Rechner vorhanden sein.
Konfiguration
Erstellt ein neues Verzeichnis und kopiert den privaten Key und das fullchain.cer z.B. von LetEncrypt mit in das Verzeichnis.
Erstellt eine docker-compose.yaml mit folgendem Inhalt:
version: "3.5"
services:
reverseproxy:
image: nginx
ports:
- "443:443"
restart: always
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./fullchain.cer:/etc/nginx/fullchain.cer
- ./private.key:/etc/nginx/private.key
Was nun noch fehlt ist die NginX Konfiguration. Dieses ist auch recht einfach gehalten. Speichert die nginx.conf so ab:
user nginx;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
error_log /dev/stdout debug;
http {
# https redirect
server {
listen 80;
server_name "~^k8s-.+\.domain\.de$";
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name "~^k8s-.+\.domain\.de$";
ssl on;
ssl_certificate /etc/nginx/fullchain.cer; # fullchain
ssl_certificate_key /etc/nginx/private.key; # private key
#
# Serve Kubernetes cluster. Forward to ingress controller
#
location /
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# static IP address of K3D cluster
proxy_pass http://192.168.2.100:4000/; # ACHTUNG: Nicht localhost!!! Das wäre der Docker Container.
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
}
Hier muss die Host Addresse (also die IP des Entwicklungsrechner) und der Port angegeben werden. In dem Beispiel ist es ein lokaler Kubernetes Cluster. Über die RegEx nimmt NginX im Server Block alle Host der Doamin entgegen.
DNS
Zu guter letzt müsst ihr für DNS Einträge sorgen. Am einfachsten über die /etc/hosts Datei. Dann sollte ein gesicherter Aufruf mit HTTPS möglich sein.