Let's Certbot
Let's Certbot — это инструмент, основанный на Certbot, который используется для автоматизации процесса получения, продления и развёртывания SSL-сертификатов.
Для проверки вашего доменного имени Let's Certbot использует метод проверки Certbot через DNS. Этот метод не требует каких-либо действий в уже развёрнутом веб-приложении, и вы также можете подать заявку на подстановочный сертификат.
В процессе проверки через DNS вам необходимо создать TXT-запись DNS с определённым содержимым для вашего доменного имени. Let's Certbot поможет вам настроить это через API DNS вашего провайдера услуг домена.
На данный момент поддерживаются следующие провайдеры услуг домена:
Пример
Установка
Как инструмент Certbot, Let's Certbot поддерживает установку через 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
Если у вас установлен Docker Compose, вы можете использовать его для запуска:
$ sudo docker-compose run --rm app
Установка без контейнеров: Let's Certbot совместим с окружением выполнения Certbot и требует операционной системы класса UNIX и Python 2.7 или 3.4+.
Прежде всего, убедитесь, что Python установлен:
$ python --version
Затем установите Certbot для вашей операционной системы согласно официальной документации Certbot.
После установки Certbot запустите его с правами администратора:
$ sudo certbot --version
Использование
Перед использованием Let's Certbot необходимо выполнить следующие настройки:
Название | Обязательно | Описание | По умолчанию |
---|---|---|---|
base.email | true | Адрес электронной почты для получения уведомлений о продлении и т. д. | |
dns | true | Настройки DNS | |
dns.wait_time | false | Время ожидания при проверке DNS (в секундах) | 20 |
dns.aliyun | false | Идентификатор ключа доступа и секретный ключ для учётной записи Alibaba Cloud | |
dns.qcloud | false | Секретный идентификатор и секретный ключ для учётной записи Tencent Cloud | |
dns.huaweicloud | false | Идентификатор ключа доступа и секретный доступ для учётной записи Huawei Cloud | |
dns.godaddy | false | Ключ API и секрет API для учётной записи GoDaddy | |
dns.cloudflare | false | Ключ API или токен API для учётной записи Cloudflare | |
log.enable | false | Включение логирования | false |
log.logfile | false | Путь к файлу журнала | ./log/application.log |
deploy.servers | false | Список серверов для развёртывания | |
deploy.server.enable | false | Включить ли скрипт развёртывания на сервере | false |
deploy.server.host | false | Адрес сервера для развёртывания (localhost для локального сервера) | |
deploy.server.port | false | Порт, на котором SSH-демон привязан к удалённому серверу для развёртывания | 22 |
deploy.server.user | false | Пользователь для входа на удалённый сервер для развёртывания | 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), используемые для разделения поддоменов и основных доменов в доменном имени. Если ваш домен верхнего или нижнего уровня не находится в файле tlds.txt , вам необходимо добавить его туда. |
Перед получением сертификата вы можете выполнить скрипт manual.py
с помощью вашего ключа доступа для тестирования DNS API:
# Контейнерный способ
$ sudo docker-compose run --rm app manual --test --domain your.example.com --dns aliyun
# Неконтейнерный способ
$ sudo python ./bin/manual.py --test --domain your.example.com --dns aliyun
Этот скрипт добавит запись _acme-challenge
TXT в ваш домен.
Выполните скрипт obtain.py
, чтобы получить сертификат:
# Контейнерный способ
$ sudo docker-compose run --rm app obtain -d your.example.com *.your.example.com
# Неконтейнерный способ
$ sudo python ./bin/obtain.py -d your.example.com *.your.example.com
Затем вы получите подстановочный сертификат с именем your.example.com
в каталоге /etc/letsencrypt/live/
.
Вы можете указать параметр --cert
для указания имени сертификата:
# Контейнерный способ
$ sudo docker-compose run --rm app obtain -d x.example.com y.example.com --cert xny.example.com
# Неконтейнерный способ
$ sudo python ./bin/obtain.py -d x.example.com y.example.com --cert xny.example.com
Если ваш поставщик домена не поддерживает DNS 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
# Неконтейнерный способ
$ sudo python ./bin/obtain.py -d x.main_domain.com y.main_domain.com --dns qcloud --challenge-alias alias_domain.com
После выполнения этой команды Let's Certbot перенесёт проверку доменных имён x.main_domain.com
и y.main_domain.com
на alias_domain.com
и создаст верификационную запись TXT DNS через API qcloud
для alias_domain.com
. Для этого вам нужно заранее добавить записи CNAME для доменов, которые вы хотите проверить:
_acme-challenge.x.main_domain.com => _acme-challenge.alias_domain.com
_acme-challenge.y.main_domain.com => _acme-change.alias_domain.com
Используйте скрипт renewal.py
, чтобы продлить срок действия сертификата:
# Контейнерный способ
$ sudo docker-compose run --rm app renewal
# Неконтейнерный способ
$ sudo python ./bin/renewal.py
Certbot продлит срок действия всех сертификатов, срок действия которых скоро истечёт.
Вы можете настроить запланированное задание, добавив скрипт продления в crontab
:
# Контейнерный способ
0 0 */7 * * sudo docker-compose -f $your_letscertbot_home/docker-compose.yml run --rm app renewal > /var/log/letscertbot-renewal.log 2>&1
# Неконтейнерный способ
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, должна иметь возможность подключиться к удалённому серверу по SSH. Чтобы соединение было успешным, вам необходимо отправить открытый ключ на удалённый сервер или предоставить deploy.server.password
инструменту sshpass
.
Кроме того, для того чтобы Let's Certbot развернул сертификаты в каталог deploy.server.deploy_to
или перезапустил nginx, пользователь deploy.server.user
должен иметь соответствующие права.
Чтобы получить скрипт развёртывания, выполните команду:
# Контейнерный способ
$ 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 )