Переходимо на HTTPS на Nginx: шпаргалка

Вже другий раз стикаюся з завданням «постав https на наш сервер» від мого боса, тож вирішив зробити для самого себе шпаргалку, а заодно і для всіх інших. Отже, ситуація наступна: до нас прийшов бос і заявив, що йому потрібен https. Під катом я напишу 5 простих кроків, як зробити буквально за годину. Приступимо.

0. Відправляємо боса купувати нам доменне ім'я, якщо його у нас ще немає — без доменного імені https поставити не можна. Після покупки не забуваємо прописати NS-запис в панелі керування нашого сервера, а також A-запис.

1. Відправляємо боса за SSL-сертифікат на nic.uk і нехай він там купує собі thawte 123 сертифікат, а ми тим часом згенеруємо для нього CSR-запит.

2. Заходимо по SSH на сервер і далі пишемо:
openssl genrsa-des3-out private.key 2048


3. Створюємо CSR-запит ось цим рядком:
openssl req-new-private key.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 ssl 443;
server_name www.site.ru;

root /var/www/html/web/; #не забуваємо тут теж вказати свій корінь, якщо він якийсь специфічний як у мене
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|виробника|views) {
deny all;
}

#avoid processing of calls to unexisting static files by yii
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|vob|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
і — вуаля!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.