Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
linux_faq:lets_encrypt_certificates_on_ubuntu [2018/11/19 08:31] – created adminlinux_faq:lets_encrypt_certificates_on_ubuntu [2019/08/23 08:01] (current) – [Прописываем сертификаты в nginx] admin
Line 1: Line 1:
 +====== Скачиваем скрипт certbot-auto======
 +  wget https://dl.eff.org/certbot-auto
 +  chmod a+x certbot-auto
 +После этого нужно запустить его и он установит нужные зависимости:
 +  sudo ./certbot-auto
 +Теперь осталось положить этот скрипт куда-нибудь в систему, что потом выполнять его через **cron** для обновления сертификатов:
 +  sudo cp ./certbot-auto /usr/local/bin/
  
 +====== Настройка web-сервера ======
 +При получении сертификата скрипт проверяет что мы управляем доменом, на который получаем серт. Для этого он создает на сервере проверочный файл и выдающий сертификат сервер запрашивает этот файл. Для того, чтобы все работало, на web-сервер должен быть сконфигурирован доступ к скрытой директории **/.well-known/acme-challenge/**. \\
 +В противном случае - скрипт постоянно ругается с ошибкой:
 +  Failed authorization procedure. wiki.autosys.tk (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://wiki.autosys.tk/.well-known/acme-challenge/fsS43RbAQXN2s9rhftKocls_trASu5_7k4nz9kf8CTg
 +В **nginx** нужно закомментировать что-то такое:
 +  location ~ /\. { deny all;
 +
 +  
 +====== Получаем сертификат одной командой ======
 +  ./certbot-auto certonly --webroot -w /var/www -d wiki.autosys.tk
 +Сертификаты попадают в папку **/etc/letsencrypt/live/** \\
 +Если доменов несколько, то команда будет такая:
 +  ./certbot-auto certonly --webroot -w /var/www -d wiki.autosys.tk -d anotherdomain.autosys.tk
 +
 +====== Обновляем ======
 +Проверяем что все обновляется:
 +  certbot-auto renew --dry-run
 +Обновляем все сертификаты:
 +  certbot-auto renew
 +
 +====== Прописываем сертификаты в nginx ======
 +В секцию **server** сервера прописываем:
 +  listen 443 ssl http2;
 +  server_name  server.domain.ru;
 +  ssl_certificate /etc/letsencrypt/live/pgadmin.adspeed.ru/fullchain.pem;
 +  ssl_certificate_key /etc/letsencrypt/live/pgadmin.adspeed.ru/privkey.pem;
 +  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
 +  
 +Тут важно, прописать **fullchain.pem**, а не **cert.pem**. Если прописать **cert.pem**, то не будет работать в некоторых браузерах, в частности - **Chrome** под **Android**
 +
 +И включаем сервер **HTTP** на 80 порту, который понадобится для обновления сертификатов,а также для перенаправления клиентов, пришедших по **HTTP** на **HTTPS**:
 +<code>server {
 +    listen        80;
 +    #server_name  server.domain.ru;
 +    root /var/www/;
 +
 +    #Enable access to acme files
 +    location ~ /\.well-known/acme-challenge/ {
 +        allow all;
 +        access_log off;
 +        log_not_found off;
 +    }
 +    return 301 https://$host$request_uri;
 +}
 +</code>
 +====== Создаем задачу в cron для автообновления ======
 +Создаем файлик **/etc/cron.weekly/certs_renew** :
 +<code>#! /bin/bash
 +# renew all lets_encrypt_certs
 +
 +sed -i '/^\ *return 301 https/ s/^/#/' /etc/nginx/sites-enabled/default
 +service nginx reload
 +
 +/usr/bin/certbot renew
 +sed -i '/^#\ *return 301 https/ s/^#//' /etc/nginx/sites-enabled/default 
 +
 +service nginx reload
 +
 +</code>
 +
 +И делаем его исполняемым:
 +  chmod a+x /etc/cron.weekly/certs_renew
 +
 +Скрипт отключает перенаправление с **HTTP** на **HTTPS**, перезагружает конфигурацию **nginx**, обновляет сертификат, включает обратно перенаправление и снова перезагружает конфигурацию **nginx**. 
 +====== Ошибки ======
 +Однажды, в логах я увидел такое:
 +  Error: couldn't get currently installed version for /opt/eff.org/certbot/venv/bin/letsencrypt....
 +Оказалось, задача по обновлению сертов не смогла их обновить. \\
 +Немного погуглив выискалсь такое решение - нужно удалить пару папок с клиентом **certbot** (из-под пользователя, который устанавливал его):
 +  sudo rm -rf /opt/eff.org/certbot/
 +  sudo rm -Rf  ~/.local/share/letsencrypt
 +и переустановить **certbot**:
 +  wget https://dl.eff.org/certbot-auto
 +  chmod a+x certbot-auto
 +  sudo ./certbot-auto
 +А когда установочный скрипт начнет спрашивать про домены - просто остановить его, введя "c".