+++ title = "Легкий и халявный SSL с Let's Encrypt" date = 2018-08-12T22:28:00Z +++ Всем нам известно насколько важна безопасность в веб-разработке, и не только в вебе. И не надо забыть про тот самый SEO Google который повышает рейтинг сайтов которые работают с https вместо старого доброго http. (Хоть мне плевать на Google, но мои клиенты так не думают, также как основная часть аудитории этой статьи) Возможно вы давно хотели добавить SSL сертификат для своего сайта или сервиса, но чувак, они же деньги стоят! А вот вы ошибаетесь (Если вы уже знали про Let's Encrypt, то прощу прошение за такое бесполезное введение). В этом туториале я коротко объясню как сгенерировать сертификат SSL с Let's Encrypt с помощью Certbot используя nginx. В моем случае я его устанавливал на Debian Stretch, комманда для установки Certbot может отличатся для вас в зависимости от вашей ОСи. Перед тем как начать, устанавливаем ``` # apt-get install certbot ``` До того как мы сможем установить сертификат, нам нужно настроить nginx для установки и последовательной продления сертификата. Для этого нам понадобится поменять дефолтный файл настройки сервера nginx. Нам это необходимо сделать для того чтобы, сервер Let's Encrypt смог прочитать файл "челленджа" сгенерирован Certbot'ом и убедится в том что домен(ы) действительно наш(и). ```nginx server { listen 80 default_server; listen [::]:80 default_server; server_name _; # This is so that Let's Encrypt can look for the challenge location /.well-known/acme-challenge/ { root /var/www/html/; default_type text/plain; } # The rest of your configuration... } ``` После того как мы редактировали настройки, нам потребуется перезапустить с ``` # sudo systemctl restart nginx ``` Теперь у нас все готово чтобы сгенерировать сертификат. Мне нужен был сертификат для несколько поддоменов, так что я их всех добавил в список аргументов используя флаг -d, например ``` # certbot certonly --webroot -w /var/www/html -d www.example.com -d example.com ``` Certbot попросит ваш адрес электронной почти, в который будут отправляться уведомления об истекании срока действия вашего сертификата. Однако Certbot красавчик умеет их продлевать автоматический. Вот и наш сертификат готов. А теперь вы можете настроить nginx чтобы он принимал https запросы и делал редирект http запросов на https. Не забудьте добавить правильный путь к вашему сертификату и ключу в `ssl_certificate` и `ssl_certificate_key` соответственно. ```nginx server { listen 80; listen [::]:80; server_name www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /path/to/key/www.example.com/privkey.pem; location /static/ { alias /home/webuser/mysite/static/; } location /media/ { alias /home/webuser/mysite/media/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:8001; } } ``` Один минус автоматического редиректа, заключается в том что старые браузеры, (ох уж эти старые неубиваемые версси Internet Explorer) которые не поддерживают https, не смогут открыть ваш сайт. Но лично мне по барабану на браузера десятилетней давности. Вы можете найти больше информации по Certbot на этой странице (сайт на английском): [https://certbot.eff.org/docs/using.html](https://certbot.eff.org/docs/using.html) Редактировано (2018/11/02): Недавно в 2018 Let's Encrypt добавили возможность сгенерировать универсальный сертификат для всех поддоменов (например, *.example.com). Чтобы сгенерировать такой вид сертификата, нам понадобится скачать последнюю версию certbot из официального репозитория гита ```sh $ git clone https://github.com/certbot/certbot.git ``` После этого можем перейти в каталог certbot, и выполнить следующую комманду ```sh $ ./certbot-auto certonly --manual \ > --preferred-challenges=dns \ > --email email@example.com \ > --server https://acme-v02.api.letsencrypt.org/directory \ > --agree-tos \ > -d *.example.com ``` Для этого нам понадобится добавить запись TXT в настройках DNS нашего домена, посколько для таких сертификатов только доступен "dns challenge". Перед тем как нажать на клавишу ввода, убедитесь что настройки вашего домена обновлены. Имейте ввиду что такие виды сертификатов нельзя обновлять в автоматическом режиме.