acme.sh реализует протокол acme
, позволяющий получать бесплатные сертификаты от letsencrypt.
Основные шаги:
- Установить acme.sh
- Сгенерировать сертификат
- Скопировать сертификат в nginx/apache или другой сервис
- Обновить сертификат
- Обновить acme.sh
- Что делать в случае ошибки, как отлаживать
Ниже приведен подробный обзор.
1. Установка acme.sh
Установка очень проста и выполняется одной командой:
|
|
Установку могут выполнять как обычные пользователи, так и root. Процесс установки включает в себя следующие шаги:
- acme.sh будет установлен в ваш домашний каталог:
|
|
-
Создается alias для удобства использования, например в .bashrc:
alias acme.sh=~/.acme.sh/acme.sh
. -
Автоматически создается cronjob, который каждый день в 00:00 проверяет все сертификаты и, если срок их действия истекает, автоматически обновляет их.
Для более сложных опций установки, смотрите: https://github.com/Neilpang/acme.sh/wiki/How-to-install.
Установка не влияет на существующие функции и файлы системы, все изменения ограничены директориями установки: ~/.acme.sh/
.
2. Генерация сертификата
acme.sh поддерживает все протоколы проверки, предусмотренные протоколом acme. Обычно используются два метода проверки: http и dns.
1. Метод http
Для проверки прав собственности на домен вам нужно разместить определенный файл в корневой директории вашего сайта. После прохождения проверки вы сможете сгенерировать сертификат:
|
|
Достаточно указать доменное имя и путь к корневой директории сайта. acme.sh автоматически сгенерирует файл проверки и поместит его в корень сайта, а затем завершит проверку. В конце процесса файл будет удален, никаких побочных эффектов не возникает.
Если вы используете apache сервер, acme.sh может автоматически определить конфигурацию apache и выполнить проверку без указания корневой директории:
|
|
Если у вас nginx, acme.sh также сможет автоматически выполнить проверку на основе конфигурации nginx без указания корневой директории:
|
|
Заметьте, что после завершения проверки в обоих режимах acme.sh восстанавливает предыдущие настройки и не вносит изменения в вашу конфигурацию. Это защищает вас от повреждения настроек, но вы также должны самостоятельно настроить конфигурацию SSL, иначе, хотя сертификаты будут успешно сгенерированы, ваш сайт все равно останется недоступным по https. Чтобы обеспечить безопасность, лучше выполнить конфигурацию вручную.
Если вы еще не запустили никакие веб-сервисы и порт 80 свободен, acme.sh может временно выступить в роли веб-сервера, прослушивая 80 порт для завершения проверки:
|
|
Для более сложного использования смотрите: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert.
2. Метод ручного dns
Вы можете вручную добавить запись типа txt в системе dns для проверки прав собственности на домен.
Преимущество этого метода в том, что вам не требуется никакой сервер или публичный IP-адрес, достаточно только записи dns для завершения проверки. Недостаток состоит в том, что без автоматической настройки DNS API acme.sh не сможет автоматически обновлять сертификаты, вам придется каждый раз вручную подтверждать право собственности на домен.
|
|
Затем acme.sh сгенерирует требуемую запись, которая появится в вашем интерфейсе управления доменами. После завершения настройки запустите генерацию сертификата:
|
|
Обратите внимание, что здесь используется команда --renew
.
Настоящая сила метода dns состоит в том, что можно использовать API, предоставляемые провайдерами доменных имен, для автоматического добавления txt-записей для завершения проверки.
acme.sh поддерживает автоматическую интеграцию с множеством DNS-провайдеров, таких как Cloudflare, DNSPod, CloudXNS, GoDaddy и OVH.
Например, для DNSPod вам необходимо войти в ваш аккаунт DNSPod и создать ваш api id и api key бесплатно. Затем выполните:
|
|
Сертификат будет сгенерирован автоматически, указанные api id и api key будут автоматически сохранены, и в будущем вам не нужно будет повторно указывать их при использовании API DNSPod:
|
|
Для получения более подробной информации об использовании API смотрите: https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md.
3. Копирование/установка сертификата
После генерации сертификата вам нужно скопировать его в нужное место.
Обратите внимание, что по умолчанию сгенерированные сертификаты хранятся в каталоге установки: ~/.acme.sh/
. Не используйте файлы из этого каталога напрямую, например, нельзя напрямую указывать их в конфигурационных файлах nginx/apache. Эти файлы предназначены для внутреннего использования, и структура каталогов может изменяться.
Правильный способ использования — это команда --install-cert
, где вы можете указать целевое местоположение. Затем файлы сертификатов будут скопированы в соответствующие местоположения, например:
Пример для Apache:
|
|
Пример для Nginx:
|
|
(Небольшое напоминание: здесь используется service nginx force-reload
, а не service nginx reload
. По результатам тестирования, reload
не перезагружает сертификаты, поэтому используется force-reload
).
В конфигурации Nginx для ssl_certificate
укажите путь /etc/nginx/ssl/fullchain.cer
, а не /etc/nginx/ssl/<domain>.cer
, иначе SSL Labs выдаст ошибку Chain issues Incomplete
.
Команда --install-cert
может принимать множество параметров для указания целевых файлов. Также можно указать reloadcmd, который будет автоматически вызван при обновлении сертификата.
Подробные параметры смотрите: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc.
Следует отметить, что все указанные параметры автоматически записываются и будут повторно использованы в будущем при автоматическом обновлении сертификата.
4. Просмотр информации о установленных сертификатах
Для просмотра информации об установленном сертификате выполните:
|
|
Команда выведет информацию, подобную следующей:
|
|