TLS/SSL auf einem Entwicklungsrechner

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.