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
