Crmgo Blog

Konfiguracja SSL (HTTPS) w nginx

Konfiguracja SSL (HTTPS) w nginx

Aby zabezpieczyć przesyłany ruch między serwerem a klientem, można wykorzystać mechanizm szyfrowania SSL. Ponieważ nginx często pełni funkcję front-endu przed Apache, lepiej powierzyć mu szyfrowanie. Użycie masowego certyfikatu samopodpisanego Skonfigurujemy użycie jednego samopodpisanego certyfikatu dla kilku…

Konfiguracja SSL (HTTPS) w nginx

Aby zabezpieczyć przesyłany ruch między serwerem a klientem, można wykorzystać mechanizm szyfrowania SSL.

Ponieważ nginx często pełni rolę frontendu przed Apache, lepiej powierzyć mu szyfrowanie.

Użycie masowego certyfikatu samopodpisanego

Skonfigurujemy użycie jednego samopodpisanego certyfikatu dla kilku witryn.

Stworzymy wspólny plik konfiguracyjny 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;

 

Stworzymy katalog, w którym będziemy przechowywać certyfikaty:

mkdir /etc/nginx/ssl

Dla większego bezpieczeństwa ograniczymy dostęp do certyfikatów:

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

Przejdźmy do tego katalogu i wygenerujmy certyfikat:

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

Podczas generowania zostaniesz poproszony o podanie niektórych danych; ponieważ tworzymy certyfikat dla siebie, ich wypełnienie nie jest konieczne.

Teraz, aby włączyć szyfrowanie dla wymaganych witryn, użyjemy następującego szablonu:

w konfiguracji witryn nginx:

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

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

        ...
}

 

Przykład z wymuszonym przekierowaniem z http na https:

w konfiguracji witryn 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 skonfigurowaniu należy zrestartować nginx:

/etc/init.d/nginx reload

Wszystko gotowe, aby uzyskać dostęp do witryny, należy użyć protokołu https - https://my.site.com

Ponieważ certyfikat jest samopodpisany, przeglądarka poprosi o potwierdzenie wyjątku dla jego użycia.

Dodatkowe opcje tworzenia certyfikatu SSL

Tworzenie certyfikatu za pomocą polecenia:

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

wyświetla pewne informacje wymagane do utworzenia certyfikatu, których wypełnienie można pominąć.

Ale jeśli interesuje Cię opis parametrów:

Wartość Opis Czy parametr obowiązkowy?
C Dwuliterowy kod kraju (Country) nie
ST Nazwa regionu/województwa/kraju/republiki/… (State Name) nie
L Nazwa miasta/osiedla/… (Locality Name) nie
O Nazwa organizacji (Organization Name) nie
OU Nazwa działu (Organization Unit) nie
CN Nazwa certyfikatu; przy tworzeniu certyfikatów serwerowych używa się nazwy domeny witryny (Common Name) tak
emailAddress adres e-mail (E-mail address) nie

Aby nie wprowadzać tych parametrów interaktywnie, można użyć opcji -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


Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.