From bad0f74397db8dc41b4ed7845b86184e15752253 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Tue, 17 Mar 2020 16:48:19 +0300 Subject: migrate post from 2018-08-12 --- .../2018-08-12_ssl-with-lets-encrypt/index.ru.md | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 content/weblog/2018-08-12_ssl-with-lets-encrypt/index.ru.md (limited to 'content/weblog/2018-08-12_ssl-with-lets-encrypt/index.ru.md') diff --git a/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.ru.md b/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.ru.md new file mode 100644 index 0000000..c041641 --- /dev/null +++ b/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.ru.md @@ -0,0 +1,139 @@ ++++ +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". Перед тем как +нажать на клавишу ввода, убедитесь что настройки вашего домена обновлены. + +Имейте ввиду что такие виды сертификатов нельзя обновлять в автоматическом режиме. -- cgit v1.2.3