Let's Certbot
Let's Certbot — это инструмент, который позволяет создавать автоматизированные скрипты на основе Certbot для получения, обновления и развёртывания SSL-сертификатов.
Для проверки доменов Let's Certbot использует dns challenge на Certbot. По сравнению с http challenge это означает, что вы можете получить wildcard-сертификат и не нужно трогать веб-сервер.
В dns challenge вам нужно установить TXT DNS-запись с определённым содержимым в домен. Let's Certbot поможет вам сделать это через API DNS регистратора домена.
На данный момент поддерживаются регистраторы доменных имён:
— Aliyun; — Tencent Cloud; — Huawei Cloud; — GoDaddy; — Cloudflare.
Let's Certbot как инструмент Certbot поддерживает docker и не-docker среды.
Клонируйте этот репозиторий, чтобы получить Let's Certbot:
$ git clone git@github.com:jinhucheung/letscertbot.git
Затем скопируйте конфигурации:
$ cd letscertbot
$ cp config.json.example config.json
Запустите Let's Certbot с помощью Docker:
$ sudo docker run --rm --name letscertbot -v "$your_letscertbot_home/config.json:/app/config.json" -v "$your_letscertbot_home/tlds.txt:/app/tlds.txt" -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" jimcheung/letscertbot
Вы можете запустить Let's Certbot с Compose, если установлен Docker Compose:
$ sudo docker-compose run --rm app
Let's Certbot требует Python 2.7 или 3.4+, работающий в UNIX-подобной операционной системе.
Сначала вам необходимо подтвердить, установлен ли python:
$ python --version
Если всё в порядке, получите Certbot на Официальном сайте для вашей системы.
После установки Certbot запустите Certbot от имени root:
$ sudo certbot --version
Перед запуском Let's Certbot у вас есть следующие настройки, которые необходимо изменить:
Имя | Требуется | Описание | По умолчанию |
---|---|---|---|
base.email | Да | Адрес электронной почты для важных уведомлений о продлении | |
dns | Да | Настройки DNS | |
dns.wait_time | Нет | Время ожидания dns challenge (секунды) | 20 |
dns.aliyun | Нет | Идентификатор ключа доступа и секретный ключ Aliyun | |
dns.qcloud | Нет | Секретный идентификатор и секретный ключ Tencent Cloud | |
dns.huaweicloud | Нет | Идентификатор ключа доступа и секретный доступ Huawei Cloud | |
dns.godaddy | Нет | Ключ API и секрет API GoDaddy | |
dns.cloudflare | Нет | Ключ API или токен API Cloudflare | |
log.enable | Нет | Включение отслеживания журнала | false |
log.logfile | Нет | Путь к файлу журнала | ./log/application.log |
deploy.servers | Нет | Серверы развёртывания Сервера развёртывания | |
:--: | :--: | ||
deploy.server.enable | false | Включает ли скрипт развёртывание на сервере | false |
deploy.server.host | false | Хост сервера развёртывания, для локального сервера — «localhost», обязательно при развёртывании | |
deploy.server.port | false | Порт удалённого сервера SSH-демона | 22 |
deploy.server.user | false | Пользователь удалённого сервера, который использует логин SSH, выполняет команду | root |
deploy.server.password | false | Пароль удалённого пользователя | |
deploy.server.deploy_to | false | Хранимый путь сертификата на сервере | /etc/letsencrypt/live |
deploy.server.restart_nginx | false | Перезапускает ли nginx на сервере | false |
deploy.server.after_hook | false | Команда, которую сервер выполняет после успешного развёртывания |
Кроме того, файл tlds.txt
содержит некоторые домены верхнего уровня (TLD) и домены второго уровня (SLD) для разделения поддомена и основного домена. Если TLD или SLD вашего домена не существует в tlds.txt
, вам нужно добавить его в список.
Перед получением сертификата вы можете запустить ручной скрипт (manual.py
) для тестирования DNS API с вашим ключом доступа:
# Запуск с помощью docker
$ sudo docker-compose run --rm app manual --test --domain your.example.com --dns aliyun
# Запуск без docker
$ sudo python ./bin/manual.py --test --domain your.example.com --dns aliyun
Скрипт разместит запись _acme-challenge
TXT под вашим доменом через указанный DNS API.
Запустите сценарий получения (obtain.py
) с правами администратора для получения сертификата:
# Запуск с помощью docker
$ sudo docker-compose run --rm app obtain -d your.example.com *.your.example.com
# Запуск без docker
$ sudo python ./bin/obtain.py -d your.example.com *.your.example.com
Затем вы получите сертификат с подстановочным знаком your.example.com
в /etc/letsencrypt/live/
Вы можете указать имя сертификата с аргументом --cert
:
# Запуск с помощью docker
$ sudo docker-compose run --rm app obtain -d x.example.com y.example.com --cert xny.example.com
# Запуск без docker
$ sudo python ./bin/obtain.py -d x.example.com y.example.com --cert xny.example.com
Если ваш регистратор доменных имён не поддерживает доступ к API или если вы обеспокоены проблемами безопасности, связанными с предоставлением доступа к вашему основному домену, вы можете использовать аргумент псевдонима DNS:
$ sudo docker-compose run --rm app obtain -d x.main_domain.com y.main_domain.com --dns qcloud --challenge-alias alias_domain.com
# Запуск без docker
$ sudo python ./bin/obtain.py -d x.main_domain.com y.main_domain.com --dns qcloud --challenge-alias alias_domai.com
В приведённой выше команде Let's Certbot переносит задачу x.main_domain.com
, y.main_domain.com
на alias_domain.com
и устанавливает текстовую запись alias_domain.com
через API qcloud
. Поэтому вам необходимо заранее добавить CNAME-запись для оспариваемого домена:
_acme-challenge.x.main_domain.com => _acme-challenge.alias_domain.com
_acme-challenge.y.main_domain.com => _acme-challenge.alias_domain.com
Продлите сертификаты с помощью сценария продления (renewal.py
):
# Запуск с помощью docker
$ sudo docker-compose run --rm app renewal
# Запуск без docker
$ sudo python ./bin/renewal.py
Тогда Certbot попытается продлить все сертификаты, срок действия которых скоро истечёт.
Вы можете добавить сценарий продления в качестве запланированной задачи в crontab
:
# Запуск с помощью docker
0 0 */7 * * sudo docker-compose -f $your_letscertbot_home/docker-compose.yml run --rm app renewal > /var/log/letscertbot-renewal.log 2>&1
# Запуск без docker
``` **Докер**
0 0 */7 * * sudo $your_letscertbot_home/bin/renewal.py > /var/log/letscertbot-renewal.log 2>&1
Сценарий будет запускать скрипт обновления каждые 7 дней.
Если вам нужно принудительно обновить указанные сертификаты, предоставьте аргументы --force
и --certs
:
# Запуск с помощью докера
$ sudo docker-compose run --rm app renewal --certs xny.example.com --force
# Запуск без докера
$ sudo python ./bin/renewal.py --certs xny.example.com --force
Если вы установите deploy.server.enable
в значение true, Certbot запустит сценарий развёртывания (deploy.py
) на хуке развёртывания. Сценарий получает обновлённый сертификат и отправляет его на настроенные серверы.
Пусть Let's Certbot развернёт сертификат на удалённом сервере через SSH, это означает, что локальный сервер, на котором работает Certbot, должен иметь возможность подключиться к удалённому серверу. Чтобы подключиться, вам необходимо добавить открытый ключ локального сервера на удалённый сервер или предоставить deploy.server.password
для sshpass
.
Чтобы добавить сертификат в deploy.server.deploy_to
или перезапустить nginx, Let's Certbot требует, чтобы у пользователя deploy.server
были разрешения.
Вы можете получить сценарий развёртывания, выполнив следующую команду:
# Запуск с помощью докера
$ sudo docker-compose run --rm app deploy --check
# Запуск без докера
$ sudo python ./bin/deploy.py --check
И отправьте сертификат на сервер:
# Запуск с помощью докера
$ sudo docker-compose run --rm app deploy --push --cert $certificate_name --server $server_host
# Запуск без докера
$ sudo python ./bin/deploy.py --push --cert $certificate_name --server $server_host
Примечание: Если deploy.server
включает SELinux в режиме принудительного применения, вам необходимо убедиться, что nginx имеет доступ к контексту безопасности SELinux deploy.server.deploy_to
.
Примечание: если вы запускаете Let's Certbot через контейнер и перезапускаете nginx на локальном сервере, вы должны установить локальный сервер как удалённый.
Отчёт об ошибке или запрос на вытягивание приветствуются.
Пожалуйста, напишите модульный тест с вашим кодом, если это необходимо.
Репозиторий доступен как открытый исходный код в соответствии с условиями лицензии MIT.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )