- PVSM.RU - https://www.pvsm.ru -

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

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

0. Отправляем босса покупать нам доменное имя, если его у нас еще нет — без доменного имени https поставить нельзя. После покупки не забываем прописать NS-записи в панели управления нашего сервера, а также A-запись.

1. Отправляем босса за SSL-сертификатом на nic.ru [1] и пускай он там покупает себе 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 [2] (зачем еще раз спрашивать все у босса, когда можно все узнать самостоятельно).

4. В это время босс дошел до той стадии, когда ему потребуется только что созданный нами CSR-запрос. Мы говорим ему, чтобы он залез по SSH на сервер и командой

cat csr.csr

скопировал код и вставил его куда нужно.

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

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

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

mv private.key /etc/nginx/private.key

8. Открываем конфиг /etc/nginx/nginx.conf и настраиваем согласно инструкциям в публикации «Настраиваем HTTPS-сервер на nginx» [5]. Если вкратце, нам надо в /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

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/nginx/83327

Ссылки в тексте:

[1] nic.ru: https://www.nic.ru/dns/service/ssl/all_certificates.html?validation=dv

[2] whois: https://www.nic.ru/whois/

[3] «почта для доменов» от «Яндекса»: https://pdd.yandex.ru

[4] промежуточный сертификат с сайта thawte: https://search.thawte.com/support/ssl-digital-certificates/index?page=content&actp=CROSSLINK&id=AR1372

[5] «Настраиваем HTTPS-сервер на nginx»: http://habrahabr.ru/post/195808/

[6] Источник: http://habrahabr.ru/post/250931/