Crmgo Blog

Konfiguracija SSL (HTTPS) u nginx-u

Konfiguracija SSL (HTTPS) u nginx-u

Da biste zaštitili saobraćaj koji se prenosi između servera i klijenta, možete koristiti mehanizam SSL šifrovanja. Pošto se nginx često koristi kao frontend ispred Apache-a, bolje je poveriti šifrovanje njemu. Korišćenje masovnog samopotpisanog sertifikata Podesićemo korišćenje jednog samopotpisanog sertifikata za više…

Konfiguracija SSL (HTTPS) u nginx-u

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


Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.