ePrivacy and GPDR Cookie Consent by TermsFeed Generator

Ghost: certifikáty a domain redirect

Článok o nastavení certifikátov a presmerovaní domén.

Ghost: certifikáty a domain redirect

Takže blog nám beží na adrese https://jozefjuris.sk/. Ale ak užívateľ zo zvyku zadá do adresného riadku www https://www.jozefjuris.sk/, tak ho prekvapí upozornenie na neplatný certifikát.

Žiadnu paniku, problém je len v tom, že skript, ktorý nám pri prvom príhlasení sa do virtuálnej mašiny vygeneroval SSL certifikát len pre doménu bez www.

Príkaz pre vygenerovanie nového certifikátu vyzerá takto:

/etc/letsencrypt/acme.sh \
--issue \
--home /etc/letsencrypt \
--server letsencrypt \
--domain jozefjuris.sk \
--domain '*.jozefjuris.sk' \
--domain juris.sk \
--domain '*.juris.sk' \
--domain jozefjuris.cz \
--domain '*.jozefjuris.cz' \
--reloadcmd "nginx -s reload" \
--dns dns_websupport \
--force

popis jednotlivých možností:

  • --issue príkaz má za úlohu vydať nový certifikát
  • --home nastavíme domovský adresár k acme.sh,
  • --server vyberieme overovací server (na výber je aj https://zerossl.com/)
  • --domain zadáme zoznam domén, pre ktoré chceme vydať certifikát
  • --reloadcmd príkaz, ktorý sa spustí na záver, reload nginx
  • --dns typ overenia identity
  • --force vynútená obnova

Poznámka, pri wildcardových (*.juris.sk) doménach je nutné použiť overenie identity cez takzvaný DNS Challenge. Postup, ako nastaviť tento spôsob u Websupportu nájdeme tu.

Po úspešnom vydaní certifikátu zostáva ešte jeden krok a to nastavenie nginx. Je potreba nastaviť dve veci:

  1. presmerovanie z nešifrovaného spojenia na šifrované http -> https
  2. presmerovanie všetkých domén na jednu -> https://www.jozefjuris.sk

Prvý bod je jednoduchý. Upravíme /etc/nginx/sites-enabled/jozefjuris.sk.conf. Nastavíme, aby všetky požiadavky smerované na port 80 boli presmerované na https://www.jozefjuris.sk.

server {
    listen 80;
    listen [::]:80;
    server_name _;

    return 301 https://www.jozefjuris.sk$request_uri;
}

Druhý bod nie je o nič zložitejší. Upravíme /etc/nginx/sites-enabled/jozefjuris.sk-ssl.conf. V prvej časti definujeme, že požiadavok, ktorý nemá doménu s názvom www.jozefjuris.sk bude presmerovaný.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name _;

    ssl_certificate /etc/letsencrypt/jozefjuris.sk/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/jozefjuris.sk/jozefjuris.sk.key;
    include /etc/nginx/snippets/ssl-params.conf;

    return 301 https://www.jozefjuris.sk$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name www.jozefjuris.sk;

    ssl_certificate /etc/letsencrypt/jozefjuris.sk/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/jozefjuris.sk/jozefjuris.sk.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}