[Из песочницы] Переходим на HTTPS на Nginx: шпаргалка

Уже второй раз сталкиваюсь с задачей «поставь https на наш сервер» от моего босса, поэтому решил сделать для самого себя шпаргалку, а заодно и для всех остальных. Итак, ситуация следующая: к нам пришел босс и заявил, что ему нужен https. Под катом я напишу 5 простых шагов, как все сделать буквально за час. Приступим.0. Отправляем босса покупать нам доменное имя, если его у нас еще нет — без доменного имени https поставить нельзя. После покупки не забываем прописать NS-записи в панели управления нашего сервера, а также A-запись.1. Отправляем босса за SSL-сертификатом на nic.ru и пускай он там покупает себе thawte 123 сертификат, а мы тем временем сгенерируем для него CSR-запрос.

2. Заходим по SSH на сервер и далее пишем:

openssl genrsa -des3 -out private.key 2048 3. Создаем CSR-запрос вот этой строкой:

openssl req -new -key private.key -out csr.csr , причем информацию (типа company name, email) берем через сервис whois (зачем еще раз спрашивать все у босса, когда можно все узнать самостоятельно).4. В это время босс дошел до той стадии, когда ему потребуется только что созданный нами CSR-запрос. Мы говорим ему, чтобы он залез по SSH на сервер и командой

cat csr.csr скопировал код и вставил его куда нужно.5. Затем босс попросит нас подтвердить владение доменом через создание почты типа admin@our-domain.com. Для этого мы воспользуемся сервисом «почта для доменов» от «Яндекса». Создаем там почту и сообщаем боссу логин/пароль.

6. Создаем bundled PEM-сертификат. Босс должен будет переслать письмо от thawte, в котором в PEM-формате будет лежать наш сертификат. Мы должны открыть sublime text и вставить туда этот сертификат, а также скачать промежуточный сертификат с сайта thawte, вставить его в тот же файл и сохранить в /etc/nginx/certificate_bundled.crt.

7. Копируем приватный ключ туда же командой

mv private.key /etc/nginx/private.key 8. Открываем конфиг /etc/nginx/nginx.conf и настраиваем согласно инструкциям в публикации «Настраиваем HTTPS-сервер на nginx». Если вкратце, нам надо в /etc/nginx/nginx.conf в секцию http прописать

ssl_session_cache shared: SSL:10m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_stapling on; resolver 8.8.8.8; Затем в /etc/nginx/conf.d/example_ssl.conf в секции server: server { listen 443 ssl; server_name www.site.ru;

root /var/www/html/web/; #не забываем здесь тоже указать свой root, если он какой-то специфический как у меня index index.php index.html; set $yii_bootstrap «index.php»; # здесь немного конфига для yii, для тех кто его использует location / { # Define the index index index.html $yii_bootstrap; try_files $uri $uri/ /$yii_bootstrap?$args; }

# Any of the protected directories, we will ignore. There is no reason # to share out the protected web spaces location ~ ^/(commands|components|config|controllers|models|vendor|views) { deny all; }

#avoid processing of calls to unexisting static files by yii location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri =404; } …

keepalive_timeout 60; ssl_certificate certificate_bundled.crt; ssl_certificate_key private.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers «RC4: HIGH:! aNULL:! MD5:! kEDH»; add_header Strict-Transport-Security 'max-age=604800';

… location ~ \.php$ { … fastcgi_param HTTPS on; # Для php-fpm … } } 9. Отключаем пароль для приватного ключа командой:

openssl rsa -in /etc/nginx/private.key -out /etc/nginx/private.key 10. Перезагружаем nginx командой

nginx -s reload и — вуаля!

© Habrahabr.ru