Нередко бывает нужно организовать работу какого-либо веб-сервиса с поддержкой шифрования, но при этом нет необходимости в валидном (платном) ssl сертификате. Например, организовать доступ в панель управления сервером для собственных нужд или нужд компании (без публичного доступа).
Здесь кратко описано, как можно быстро сгенерировать самоподписаный SSL сертификат для nginx, если его не оказалось после установки веб-сервера из пакетов (rpm, deb).
Вариант 1:
Создайте закрытый ключ:
sudo openssl genrsa -out site-key.key 2048
Создайте запрос на подпись сертификата (CSR):
sudo openssl req -new -key site-key.key -out site-request.csr
Программа задаст вам несколько вопросов, чтобы получить информацию, необходимую для создания сертификата.
Заполните форму и подпишите сертификат:
sudo openssl x509 -req -days 3650 -in site-request.csr -signkey site-key.key -out site-cert.crt
Чтобы повысить уровень безопасности сервера, сгенерируйте DHE (временный 2048-битный ключ Диффи-Хеллмана).
sudo openssl dhparam -out dhparam.pem 2048
Вариант 2:
Шаг 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; }
}
В рассмотренном примере конфигурации стоит обратить внимание на секции, помеченные голубым цветом. Именно их, как минимум, нужно добавить в конфигурацию веб-сервера, чтобы он начал обрабатывать запросы по https протоколу. Стоит отметить, что директива http2 не является обязательной.
Шаг 3 (проверка конфигурации и применение настроек):
# запускаем проверку конфигурации средствами самого nginx nginx -t # проверяем, чтобы тест прошёл успешно и применяем изменения service nginx reload