Уже второй раз сталкиваюсь с задачей «поставь 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
и — вуаля!
Автор: pistonsky