Уже второй раз сталкиваюсь с задачей «поставь https на наш сервер» от моего босса, поэтому решил сделать для самого себя шпаргалку, а заодно и для всех остальных. Итак, ситуация следующая: к нам пришел босс и заявил, что ему нужен https. Под катом я напишу 5 простых шагов, как все сделать буквально за час. Приступим.
0. Отправляем босса покупать нам доменное имя, если его у нас еще нет — без доменного имени https поставить нельзя. После покупки не забываем прописать NS-записи в панели управления нашего сервера, а также A-запись.
1. Отправляем босса за SSL-сертификатом на nic.ru и пускай он там покупает себе thawte 123 сертификат, а мы тем временем сгенерируем для него CSR-запрос.
2. Заходим по SSH на сервер и далее пишем:
3. Создаем CSR-запрос вот этой строкой:
4. В это время босс дошел до той стадии, когда ему потребуется только что созданный нами CSR-запрос. Мы говорим ему, чтобы он залез по SSH на сервер и командой
5. Затем босс попросит нас подтвердить владение доменом через создание почты типа admin@our-domain.com. Для этого мы воспользуемся сервисом «почта для доменов» от «Яндекса». Создаем там почту и сообщаем боссу логин/пароль.
6. Создаем bundled PEM-сертификат. Босс должен будет переслать письмо от thawte, в котором в PEM-формате будет лежать наш сертификат. Мы должны открыть sublime text и вставить туда этот сертификат, а также скачать промежуточный сертификат с сайта thawte, вставить его в тот же файл и сохранить в /etc/nginx/certificate_bundled.crt. Внимание! Сначала идет то, что нам выслал босс, а уже потом — промежуточный сертификат, который мы скачали по той ссылке.
7. Копируем приватный ключ туда же командой
8. Открываем конфиг /etc/nginx/nginx.conf и настраиваем согласно инструкциям в публикации «Настраиваем HTTPS-сервер на nginx». Если вкратце, нам надо в /etc/nginx/nginx.conf в секцию http прописать
Затем в /etc/nginx/conf.d/example_ssl.conf в секции server:
9. Отключаем пароль для приватного ключа командой:
10. Перезагружаем nginx командой
0. Отправляем босса покупать нам доменное имя, если его у нас еще нет — без доменного имени https поставить нельзя. После покупки не забываем прописать NS-записи в панели управления нашего сервера, а также A-запись.
1. Отправляем босса за SSL-сертификатом на nic.ru и пускай он там покупает себе thawte 123 сертификат, а мы тем временем сгенерируем для него CSR-запрос.
2. Заходим по SSH на сервер и далее пишем:
openssl genrsa -out private.key 2048
3. Создаем CSR-запрос вот этой строкой:
, причем информацию (типа company name, email) берем через сервис whois (зачем еще раз спрашивать все у босса, когда можно все узнать самостоятельно).openssl req -new -sha256 -key private.key -out csr.csr
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
