Установка SSL сертификата NGINX


Рассмотрим как выполняется установка SSL сертификата для nginx. Будем использовать бесплатный сертификат letsencrypt.

Устанавливать сертификат на Nginx требуется если этот пакет работает в качестве фронтенд сервера, если используется Apache — сертификат нужно устанавливать для Apache

Установка SSL сертификата NGINX


Прежде всего генерируем последовательность Деффи-Хельмана, которая уникальна для сервера и позволит обеспечить лучшее шифрование (подробнее о TLS и Nginx).

openssl dhparam -out /etc/ssl/example.com.pem 2048



Создадим файл виртуального хоста


mcedit /etc/nginx/sites-availible/example.com


server {
listen 123.123.123.123:80;
server_name example.com www.example.com ;

return 301 https://$host$request_uri;
rewrite ^ https://example.com$request_uri? permanent;
}
server {
listen 123.123.123.123:443;
server_name example.com www.example.com ;
charset UTF-8;

access_log off;
error_log /var/log/nginx/error.log notice;

ssl on;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_dhparam /etc/ssl/example.com.pem;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";

include static.conf;

location / {
root              /web/example.com/www;
proxy_pass        http://127.0.0.1:80;
proxy_redirect    http://127.0.0.1:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
$proxy_add_x_forwarded_for;
proxy_set_header HTTPS "on";
proxy_set_header X-Forwarded-Proto "https";
}
}


Сгенерированный ранее /etc/ssl/example.com.pem подключаем директивой ssl_dhparam. Этот шаг необязателен, но dhparam даст больший уровень защищенности.



В качестве публичного IP адреса сервера используется 123.123.123.123. Адрес нужно задавать если сайт на сервере один или если для других сайтов также задан адрес. Если нет, то нужно указывать просто listen 443;



Директивами ssl_certificate_key и ssl_certificate заданы пути к файлам сертификата и приватного ключа. Сами сертификаты можно получить запустив certbot с ключом certonly.

К конфигурации указан домен example.com, путь к каталогу /web/example.com/www и адрес 127.0.0.1:80 для перенаправления запросов бэкенду.

Для других сайтов все эти параметры будут индивидуальны.



Для работы сервиса указан порт 443. С порта 80 (http) выполняется переадресация на https.


Переадресация всех запросов на https при установке SSL сертификата на Nginx


Редирект реализован за счет добавления в конфигурационный файл приведенной ниже строки

return 301 https://$host$request_uri;




Сайт нужно активировать командой

ln -s /etc/nginx/sites-availible/example.com /etc/nginx/sites-enabled



Далее проверяем конфигурацию веб-сервера

nginx -t



Затем даем команду на перечитывание конфигурационных файлов

nginx -s reload



Проверяем все ли получилось

netstat -nltp



Процесс Nginx на порту 443 будет означать, что сервис работает так как нужно. Теперь можно проверять сайт — он будет доступен по протоколу https и браузер будет принимать SSL сертификат.


Мы рассмотрели как выполняется установка SSL сертификата для nginx.



Защищенное соединение требуется не только для веб-сайтов, по нему также работает почта и всевозможные корпоративные сервисы. SSL сертификаты почти всегда платные, исключение — Let's encrypt, также имеющие недостаток в виде срока действия в 3 месяца (про обновление в автоматическом режиме).



Если непосредственно клиенты с сервисом не взаимодействуют и предупреждение о недоверенном сертификате не критично, его можно сгенерировать самостоятельно.

Сказать спасибо