Главная
Главная Руководства WWW › Получаем SSL сертификаты от Let's Encrypt при помощи certbot.



Автор:

Статья опубликована: 2018-02-22 11:38:06
Последние правки: 2019-06-15 16:55:05

Let's Encrypt - центр сертификации от некоммерческой организации ISRG, существующий при поддержке EFF и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Работать с Let's Encrypt будем через программу Certbot. ОС: FreeBSD или Ubuntu.


  • Certbot - установка
    FreeBSD
    # cd /usr/ports/security/py-certbot
    # make install clean
    
    Ubuntu
    Пробуем:
    # apt-get install certbot
    
    Если не найдена, значит у вас старая версия убунты и необходимо сделать так:
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install letsencrypt
    


  • Регистрация в Let's Encrypt (одноразово)
    # certbot register --email your@email.com
    


  • Получение сертификатов "вручную" (standalone)
    Подходит, если вам нужен сертификат не для сайта, а, например, почтовика и когда не установлен web-сервер.
    В процессе получения сертификатов таким способом, на сервере должен быть свободен 80-й порт, что означает необходимость тушить web-сервер на время получения сертификатов;
    # certbot certonly --standalone -d mysite.com -d mail.mysite.com
    


  • Обновление сертификатов для сайтов
    Это случай, когда certbot должен обновлять сертификаты на сервере, где работает web-сервер и который тушить крайне нежелательно.

    Создаем директорию .well-known, в которой certbot будет создавать файлы, необходимые для проверки прав на домены. Я такую сделал на default сайте, но вы можете делать её где угодно:
    # mkdir /sites/_default/htdocs/.well-known
    
    Для проверки, создайте там html-файл, он должен быть доступен по http(s) с сайтов, для которых выпускается сертификат.

    Создаем файл с настройками certbot
    FreeBSD - /usr/local/etc/letsencrypt/cli.ini
    authenticator = webroot
    webroot-path = /sites/_default/htdocs
    post-hook = /usr/local/etc/rc.d/nginx reload
    text = True
    
    Ubuntu - /etc/letsencrypt/cli.ini
    authenticator = webroot
    webroot-path = /sites/_default/htdocs
    post-hook = systemctl reload nginx
    text = True
    

    Затем, добавляем в конфигурацию веб-сервера:

    • nginx - делаем include-файл с location внутри для nginx. Обзываем его acme.inc.
      location /.well-known {
          root /sites/_default/htdocs;
      }
      
      Этот файл нужно будет добавить в nginx во все server, для сайтов которых обновляются сертификаты:
         include /usr/local/etc/nginx/acme.inc;
      
    • apache2 - делаем файл conf-available/certbot.conf
      Alias /.well-known /sites/_default/htdocs/.well-known
      
      Делаем конфигурацию активной, разместив ссылку на файл в директории conf-enabled (пример для Ubuntu)
      # cd /etc/apache2/conf-enabled
      # ln -s ../conf-available/certbot.conf
      

    Пробуем тестовый (--dry-run) запрос сертификата:
    # certbot certonly --dry-run -d mysite.com -d www.mysite.com
    ....
    IMPORTANT NOTES:
     - The dry run was successful.
    

    Получаем сертификат по-настоящему:
    # certbot certonly -d mysite.com -d www.mysite.com
    

    Если вдруг приспичило добавить в сертификат новый поддомен, то запускаем так (перечисляем уже существующие домены плюс добавляем новый):
    # certbot certonly --expand -d mysite.com -d www.mysite.com -d new.mysite.com
    


  • Автоматическое обновление через cron
    В Ubuntu о нас уже позаботились, команда для запуска находится в файле /etc/cron.d/certbot, единственное, что нужно сделать, это добавить в файле в конец строки запуска (после certbot -q renew) ключ:
     --allow-subset-of-names
    
    Для FreeBSD добавляем в cron строчку:
    33 */12 * * * /usr/local/bin/certbot renew --quiet --allow-subset-of-names
    
    33 - обязательно замените на число от 0 до 59;
    --allow-subset-of-names - этот ключ при обновлении позволяет пропускать те домены, для которых нельзя подтвердить владение. Если ключ не задать, то certbot будет вываливаться с ошибкой и не получит новый сертификат. Если сертификат был выпущен для нескольких доменов, то просрочка будет для всех доменов сертификата.


  • Отзыв сертификата: FreeBSD
    # certbot revoke --cert-path /usr/local/etc/letsencrypt/live/CERTNAME/cert.pem
    
    Ubuntu
    # certbot revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem
    
    Удаление сертификата с диска сервера:
    # certbot delete --cert-name mysite.com
    


  • nginx - пути к сертификатам для добавления в блок server

    FreeBSD
    ssl_certificate /usr/local/etc/letsencrypt/live/mysite.com/fullchain.pem;
    ssl_certificate_key /usr/local/etc/letsencrypt/live/mysite.com/privkey.pem;
    
    Ubuntu
    ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
    


  • apache2 - пути к сертификатам для добавления в блок VirtualHost

    FreeBSD
    SSLEngine on
    SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/mysite.com/privkey.pem;
    SSLCertificateFile /usr/local/etc/letsencrypt/live/mysite.com/cert.pem;
    SSLCertificateChainFile /usr/local/etc/letsencrypt/live/mysite.com/chain.pem;
    
    Ubuntu
    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem;
    SSLCertificateFile /etc/letsencrypt/live/mysite.com/cert.pem;
    SSLCertificateChainFile /etc/letsencrypt/live/mysite.com/chain.pem;
    


  • Посмотреть данные сертификата
    # openssl x509 -in cert.pem  -noout -text