Генерация SSL сертификата для nginx (openssl)

Нередко бывает нужно организовать работу какого-либо веб-сервиса с поддержкой шифрования, но при этом нет необходимости в валидном (платном) ssl сертификате. Например, организовать доступ в панель управления сервером для собственных нужд или нужд компании (без публичного доступа).

Здесь кратко описано, как можно быстро сгенерировать самоподписаный SSL сертификат для nginx, если его не оказалось после установки веб-сервера из пакетов (rpm, deb).

Шаг 1 (генерируем сертификат):

mkdir /etc/nginx/ssl 
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

При выполнении второй команды потребуется заполнить несколько полей. Тут мы приведём пример, когда приходится генерировать сертификат без указания организации:

Country Name (2 letter code) [AU]:RU 
State or Province Name (full name) [Some-State]:Krasnodarskiy kray 
Locality Name (eg, city) []:Krasnodar 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Private 
Organizational Unit Name (eg, section) []:Private 
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com 
Email Address []:admin@your_domain.com

Шаг 2 (установка сертификата):

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 
    listen 443 ssl http2; root /usr/share/nginx/html; 
    index index.html index.htm; 
    server_name your_domain.com; 
    ssl_certificate /etc/nginx/ssl/nginx.crt; 
    ssl_certificate_key /etc/nginx/ssl/nginx.key; 
    location / { try_files $uri $uri/ =404; } 
}

Copy

В рассмотренном примере конфигурации стоит обратить внимание на секции, помеченные голубым цветом. Именно их, как минимум, нужно добавить в конфигурацию веб-сервера, чтобы он начал обрабатывать запросы по https протоколу. Стоит отметить, что директива http2 не является обязательной.

Шаг 3 (проверка конфигурации и применение настроек):

# запускаем проверку конфигурации средствами самого nginx 
nginx -t
# проверяем, чтобы тест прошёл успешно и применяем изменения
service nginx reload