Da biste zaštitili saobraćaj koji se prenosi između servera i klijenta, možete koristiti mehanizam šifrovanja SSL.
Budući da nginx često deluje kao front-end ispred Apache-a, bolje je poveriti šifrovanje njemu.
Korišćenje masovnog samopotpisanog sertifikata
Konfigurišimo korišćenje jednog samopotpisanog sertifikata za više sajtova.
Kreirajmo zajednički konfiguracioni fajl 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;
Kreirajmo fasciklu u kojoj ćemo čuvati sertifikate:
mkdir /etc/nginx/ssl
Za veću bezbednost ograničimo pristup sertifikatima:
chown nginx:nginx /etc/nginx/ssl chmod 700 /etc/nginx/ssl
Pređite u tu fasciklu i generišite sertifikat:
cd /etc/nginx/ssl openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
Prilikom generisanja tražiće se unos određenih podataka, ali pošto kreiramo sertifikat za sebe, njihovo popunjavanje nije obavezno.
Sada ćemo za uključivanje šifrovanja potrebnih sajtova koristiti sledeći šablon:
u konfiguraciji sajtova nginx:
server {
listen *:443; # порт https
server_name my.site.com; # ваш сайт
include /etc/nginx/ssl.conf; # подключение конфигурации ssl
...
}
Primer sa prisilnim preusmeravanjem sa http na https:
u konfiguraciji sajtova 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.
... }
Nakon konfiguracije potrebno je restartovati nginx:
/etc/init.d/nginx reload
Sve je spremno, za pristup sajtu treba koristiti https protokol - https://my.site.com
Budući da je sertifikat samopotpisan, pregledač će tražiti potvrdu izuzetka za njegovo korišćenje.
Dodatne opcije kreiranja SSL-sertifikata
Kreiranje sertifikata komandom:
openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
traži određene informacije za kreiranje sertifikata, čije popunjavanje se može preskočiti.
Ako vas zanima, evo opisa parametara:
| Vrednost | Opis | Obavezan parametar? |
|---|---|---|
| C | Dvoslovni kod države (Country) | ne |
| ST | Naziv regiona/pokrajine/republike/… (State Name) | ne |
| L | Naziv grada/naselja/… (Locality Name) | ne |
| O | Naziv organizacije (Organization Name) | ne |
| OU | Naziv odeljenja (Organization Unit) | ne |
| CN | Ime sertifikata, prilikom kreiranja serverskih sertifikata koristi se domensko ime sajta (Common Name) | da |
| emailAddress | adresa e-pošte (E-mail address) | ne |
Da ne biste ručno unosili ove parametre, interaktivno možete koristiti opciju -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
