Поиск по сайту:

Как запросить сертификат LetsEncrypt с помощью Acme


LetsEncrypt изменил мир SSL-сертификатов, когда его предложение бесплатных недолговечных SSL-сертификатов позволило огромному количеству людей и компаний бесплатно защитить свои веб-приложения. С этой службой должна была существовать необходимая инфраструктура, и с этой целью возникло множество приложений, которые соответствовали потребностям выдачи SSL.

Одной из наиболее распространенных утилит является утилита CertBot, которая может работать хорошо, но есть еще одно доступное приложение с открытым исходным кодом — acme.sh. Это полностью основанный на оболочке клиент ACME (протокол, используемый LetsEncrypt для выдачи SSL-сертификатов). Благодаря большому количеству встроенных расширенных функций этот клиент позволяет создавать сложные конфигурации.

Установка Acme.sh

Самый простой способ установить [acme.sh]() — это следующий, который загружает и выполняет скрипт отсюда, https://raw. githubusercontent.com/acmesh-official/acme.sh/master/acme.sh.

curl <https://get.acme.sh> | sh

Исходный код этого сайта находится здесь, если вы хотите проверить, что делает настоящий скрипт.

Программа установки загрузит и переместит файлы в ~/.acme.sh и установит псевдоним в ваш файл ~/.bashrc. Кроме того, задание cron будет установлено, если оно доступно.

Первые шаги

То, как вы используете [acme.sh](), во многом зависит от метода и приложения, для которого вы запрашиваете сертификат. Acme.sh предлагает множество различных способов запроса сертификата, например:

  • Режим веб-рута
  • Автономный режим
  • Автономный режим tls-alpn
  • Режим Apache
  • Режим Nginx
  • Режим DNS
  • Режим псевдонима DNS
  • Режим без сохранения состояния

В этой статье я собираюсь продемонстрировать два разных способа запроса сертификата. Я включаю конфигурации веб-серверов как для NGINX, так и для Apache, которые используют метод Webroot. Метод режима DNS использует файл конфигурации для создания записей CNAME, которые используются для проверки домена, вместо создания файла в файловой системе.

Конфигурация веб-сервера

Конфигурация NGINX LetsEncrypt

NGINX упрощает создание общей конфигурации для использования при использовании метода webroot для запроса сертификата.

letsencrypt.conf

Рекомендуется создать автономную конфигурацию, которую при необходимости можно включить в конфигурации виртуального хоста, например: include /etc/nginx/letsencrypt.conf

# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {
    # Set correct content type. According to this:
    # <https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29>
    # Current specification requires "text/plain" or no content header at all.
    # It seems that "text/plain" is a safe option.
   default_type "text/plain";
}

# Direct access returns a 404
location = /.well-known/acme-challenge/ {
   return 404;
}

Апачи

Как и NGINX, Apache может создать отдельный файл конфигурации. Пример такой конфигурации показан ниже.

/etc/apache2/conf-available/letsencrypt.conf

В этом случае конфигурация Apache специфична для виртуального хоста из-за необходимости включать расположение на диске. Ниже приведено обычное расположение, но оно может отличаться в зависимости от конкретной конфигурации.

Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
<Directory "/var/www/html/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Конфигурация DNS

В этой статье я демонстрирую режим DNS с помощью Cloudflare, так как он предлагает чрезвычайно быстрые изменения DNS и исключительно хорошо работает с этим методом.

Acme.sh использует две переменные среды для метода dns_cf: CF_Key и CF_Email. Чтобы включить это в свою среду при запуске, вы можете включить эту конфигурацию в свой файл .bashrc.

Это может быть неочевидно, но перед каждой командой экспорта стоит предшествующий пробел, что обычно гарантирует, что они не будут прочитаны в истории, на всякий случай.

 export CF_Key="#########..."
 export CF_Email="cfaccount@email.com"

Выпуск сертификата через метод Webroot

При выполнении следующей команды два домена определяются в одном сертификате. Это делается для того, чтобы при запросе любого имени хоста (и часто перенаправлении на каноническое) запрос по-прежнему был защищен безопасным соединением.

acme.sh --issue -d example.com -d www.example.com -w /var/www/html

Выданные сертификаты находятся в /.acme.sh/acme.sh/{domain_name}

Выпустить сертификат с помощью метода DNS

При использовании метода выдачи DNS временная запись txt создается через API Cloudflare, и LetsEncrypt проверяет домен с помощью этой временной записи. Это более чистый метод, так как не требуется настройка webroot.

# Multiple Domains
acme.sh --issue --dns dns_cf -d example.com -d www.example.com

Выданные сертификаты находятся в /.acme.sh/acme.sh/{domain_name}

Продление сертификата

По умолчанию Acme.sh создаст cronjob, подобный следующей записи:

48 0 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null

Чтобы принудительно обновить, вы можете ввести следующую команду, которая будет использовать тот же метод выдачи, что и изначально:

acme.sh --renew -d example.com -d www.example.com

Удаление сертификатов

Если вы больше не хотите продлевать сертификат, его очень легко удалить. Однако это не удаляет сертификат с диска. Для этого вам нужно будет перейти к ~/.acme.sh/ и удалить каталог, содержащий сертификаты.

acme.sh --remove -d example.com -d www.example.com

Это позволяет очистить сертификаты, настроенные для обновления, что вы можете проверить, перечислив сертификаты следующим образом:

acme.sh --list

Заключение

LetsEncrypt предлагает отличный и простой в использовании сервис для предоставления SSL-сертификатов для использования на веб-сайтах. Создать безопасный веб-сайт стало проще, чем когда-либо, а использование клиента acme.sh означает, что у вас есть полный контроль над тем, как это происходит на вашем веб-сервере.

При наличии ряда различных методов получения сертификата даже очень безопасные методы, такие как делегированный домен, позволяют правильно получить необходимые сертификаты.