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

в 9:54, , рубрики: HTTPS, nginx, SSL, Веб-разработка, информационная безопасность

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

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js