Раньше работать через зашифрованный протокол стоило довольно больших денег. Особенно если вы хотели зашифровать весь домен.

Теперь, используя сервис letsencrypt все сделать очень просто и совершенно бесплатно!

Здесь описана только работа с сервером Nginx. С apache,docker... есть документация на оф. сайте: https://letsencrypt.readthedocs.org

Порядок настройки и установки:

1. Клонируем себе репозиторий letsencrypt:


git clone https://github.com/letsencrypt/letsencrypt

2. В корне сайта создаем дирректорию, с доступом извне.

Пример:
Сайт находится по пути /www/site/, значит в конфиг nginx в секцию Server добавляем:


location ~ /.well-known {
     allow all;
}

 

Важное замечание!
Если в настройках nginx'a есть реврайты, их необходимо отключить! пример:


server {
    listen 80;
    server_name blog-tree.com;

    root /home/blog-tree;
    location /.well-known {
        alias /home/www/blog-tree/.well-known;
    }

#    rewrite ^/(.*)$ http://www.blog-tree.com permanent;
}

 

3. Запускаем:


./letsencrypt-auto certonly -a webroot --webroot-path=/www/site -d example.com -d www.example.com

4. Для улучшения защиты генерируем Diffie-Helman group сертификат:


sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

5. Настраиваем TLS/SSL в Nginx:

Удаляем все старые порты из конфига:


        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

Вместо них начинаем слушать 443:


        listen 443 ssl;

        server_name example.com www.example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Для использования более усовершенствованного шифрования можем еще подключить наш супер секретный сложный ключ


ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

Не защищенные домены редиректим на защищенные


server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Сохраняем файл и перезапускаем nginx

6. Для проверки корректности работы https, запускаем https://www.ssllabs.com/ssltest/analyze.html?d=example.com, который должен показать A+

7. Автообновление сертификата. Т.к. сертификат выдается только на 3 месяца, ставим для него автообновление, например раз в месяц.


30 2 * * 1 /path_to/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload

Пишем лог, что бы видеть как все прошло

В случае, если не удается обновиться т.к. нет доступа к папке .well-known

Скорее всего необходимо добавить в секцию http доступ на эту папку, что-то в виде:


server {
    listen 80;
    server_name example.com www.example.com;
    root /home/www/site/public/;
    location ~ /.well-known {
        allow all;
    }

    location / {
        return 301 https://$server_name$request_uri;
    }
}
Написано 20 марта 2016 в 14:31

0 комментариев


Вы должны быть авторизованы, для того, чтобы оставлять свои комментарии.

Войдите через соц.сети

или через почту здесь