HTTPS pro lokální síť HA pomocí NGINX

Router

Na DNS vytvořit ha.local na server na kterém je nainstalován NGINX

Konfigurační soubor pro tvorbu certifikátu pomocí OpenSSL

Tvoříme soubory atlantus.key, atlantus.crt pomocí atlantus.cfg

[ req ]
default_bits		= 2048
distinguished_name	= req_distinguished_name
attributes		= req_attributes
x509_extensions    	= v3_req
prompt             	= no

[ req_distinguished_name ]
countryName=		    CZ
stateOrProvinceName=	    Czechia
localityName=		    XXXXX
organizationName=	    XXXXXX
organizationalUnitName=	    homeassistant
commonName=		    HomeAssistant
emailAddress=		    xxxx@xxx.xx

[ req_attributes ]
[ req_distinguished_name ]
CN = Atlantus

[ req_ext ]
subjectAltName = @alt_names

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = ha.local

Příkazy pro tvorbu certifikátů

openssl genrsa -out atlantus.key 2048
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout atlantus.key -out atlantus.crt -config atlantus.cnf

Instalace certifikátu do Windows

Win+R certmgr.msc
Trusted root Certification Authorities

Konfigurační soubor

upravte configuration.yaml:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - xxx.xxx.xxx.xxx # IP kde bezi NGINX server

nginx.conf

# Konfigurace pro home-assistant
http {
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

     server {
        listen 443 ssl;                                   # Naslouchání na HTTPS
        server_name ha.local;                             # ha.local musí směrovat na adresu, kde se nachází NGINX server

        # Cesty k SSL certifikátům (nahraďte vašimi cestami)
        ssl_certificate     /etc/nginx/ssl/atlantus.crt;
        ssl_certificate_key /etc/nginx/ssl/atlantus.key;

        location / {
            proxy_pass http://<home assistant ip>:8123;    # IP adresa a port existujícího web serveru
            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;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }              
    }

events {}

Instalace do dockeru

docker-compose.yml

version: "3.8"
services:
  nginx:
    container_name: nginx-proxy # Mozno zmenit
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /cesta/logs:/var/log/nginx
      - /cesta ke konfiguracnimu soboru/nginx.conf:/etc/nginx/nginx.conf:ro     
      - /cesta k certifikatum:/etc/nginx/ssl:ro
    restart: unless-stopped

Problém HSTS

Pokud chcete vyčistit nebo odstranit záznam HSTS (HTTP Strict Transport Security) pro konkrétní doménu v prohlížeči Google Chrome, postupujte následovně:

  1. Otevřete Chrome a přejděte na stránku s interním nastavením HSTS:
    • Do adresního řádku zadejte: chrome://net-internals/#hsts a stiskněte Enter.
  2. Najděte sekci “Delete domain security policies”:
    • V části “Delete domain security policies” zadejte název domény, kterou chcete vyčistit z HSTS (např. priklad.cz).
  3. Odstraňte doménu z HSTS:
    • Klikněte na Delete. Tím dojde k odstranění záznamu HSTS pro zadanou doménu.
  4. Vyzkoušejte přístup na doménu:
    • Po odstranění můžete vyzkoušet opětovný přístup na doménu a ověřit, zda se načítá bez přesměrování na HTTPS, pokud není HSTS znovu vyžadováno serverem.

Tímto způsobem by mělo být HSTS pro konkrétní doménu v Chrome vymazáno.

Ostatní

Základní konfigurace pro port 80

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}