Crmgo Blog

Nastavení SSL (HTTPS) v nginx

Nastavení SSL (HTTPS) v nginx

Pro ochranu přenášeného provozu mezi serverem a klientem lze použít mechanismus šifrování SSL. Protože nginx často funguje jako frontend před Apache, je lepší svěřit šifrování jemu. Použití hromadně podepsaného certifikátu Nastavíme použití jednoho podepsaného certifikátu pro více…

Nastavení SSL (HTTPS) v nginx

Pro ochranu přenášeného provozu mezi serverem a klientem lze použít mechanismus šifrování SSL.

Poněvadž nginx často vystupuje jako frontend před Apache, je lepší svěřit šifrování jemu.

Použití hromadného sebeznameneho certifikátu

Nastavíme použití jednoho sebeznameneho certifikátu pro více webů.

Vytvoříme společný konfigurační soubor SSL:

/etc/nginx/ssl.conf

# Подключение самоподписанного сертификата
# генерация сертификата:
# openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key

ssl			on;
ssl_protocols		SSLv3 TLSv1;
ssl_certificate		/etc/nginx/ssl/cert.pem;
ssl_certificate_key	/etc/nginx/ssl/cert.key;

 

Vytvoříme složku, ve které budeme certifikáty ukládat:

mkdir /etc/nginx/ssl

Pro větší bezpečnost omezíme přístup k certifikátům:

chown nginx:nginx /etc/nginx/ssl
chmod 700 /etc/nginx/ssl

Přejdeme do této složky a vygenerujeme certifikát:

cd /etc/nginx/ssl
openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key

Při generování vás budou vyzváni k zadání některých údajů, protože vytváříme certifikát pro sebe, není jejich vyplnění povinné.

Nyní pro povolení šifrování potřebných webů použijeme následující šablonu:

v konfiguraci webů nginx:

server {
        listen          *:443;       # порт https
        server_name     my.site.com; # ваш сайт

        include	/etc/nginx/ssl.conf; # подключение конфигурации ssl

        ...
}

 

Příklad s vynuceným přesměrováním z http na https:

v konfiguraci webů nginx:

server {
        listen          *:443;       # порт https
        listen		*:80;        # порт http
        server_name     my.site.com; # ваш сайт

        include	/etc/nginx/ssl.conf; # подключение конфигурации ssl
        if ( $scheme = "http" ) {
	      rewrite ^/(.*)$	https://$host/$1 permanent;
        }
   }
? или
server {
        listen 80;
        listen [::]:80;
        server_name .domain.com;
        rewrite     ^ https://domain.com$request_uri? last;
}
Пожалуйста, поправьте, это важно. Вместо last можно использовать permanent или нечто другое, вот все флаги:
    last — завершает обработку текущего набора директив ngx_http_rewrite_module, после чего ищется соответствие URI и location;
    break — завершает обработку текущего набора директив ngx_http_rewrite_module;
    redirect — возвращает временный редирект с кодом 302; используется, если заменяющая строка не начинается с "http://";
    permanent — возвращает постоянный редирект с кодом 301.
        ...
}

 

Po nastavení je nutné nginx restartovat:

/etc/init.d/nginx reload

Vše je připraveno, pro přístup k webu použijte protokol https - https://my.site.com

Poněvadž je certifikát sebeznamenej, prohlížeč požádá o potvrzení výjimky pro jeho použití.

Další volby vytváření SSL certifikátu

Vytvoření certifikátu příkazem:

openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key

vyžaduje určité informace pro vytvoření certifikátu, jejichž vyplnění lze přeskočit.

Ale pokud vás zajímá, zde je popis parametrů:

Hodnota Popis Povinný parametr?
C Dvouznakový kód země (Country) ne
ST Název regionu/oblasti/kraje/republiky/… (State Name) ne
L Název města/obce/… (Locality Name) ne
O Název organizace (Organization Name) ne
OU Název oddělení (Organization Unit) ne
CN Název certifikátu, při vytváření serverových certifikátů se používá doménové jméno webu (Common Name) ano
emailAddress e-mailová adresa (E-mail address) ne

Abychom nemuseli zadávat tyto parametry interaktivně, lze použít volbu -subj:

openssl req -new -x509 -days 9999 -nodes -subj /C=RU/O=My\ site/CN=my.site.com/emailAddress=admin@site.com -out cert.pem -keyout cert.key


Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.