- Почему лучше рассчитывать на sni?
- Получаем Cloudflare API токен
- 1: установка зависимостей
- Настройка автопродления сертификатов
- Инсталлируем acme.sh клиент
- 2: загрузку клиента let’s encrypt
- Выпускаем Let’s Encrypt wildcard сертификат
- 3: настройка приложения
- Конфигурируем веб-сервер Ngnix
- Инсталлируем Let’s Encrypt wildcard сертификат
- Автоматическое продление Let’s Encrypt wildcard сертификата
- Caveat emptor
- Deploy the lets encrypt ssl certificate for zimbra mail
- Error: letsencrypt challenge request 429
- Errors when installing let’s encrypt
- Google и startssl
- Verify the letsencrypt certificate for zimbra mail
- Zimbra letsencrypt
- Zimbra letsencrypt how to install it
- Автообновление сертификатов let’s encrypt
- Вот и всё
- Выпуск и настройка сертификата для панели управления vestacp
- Генерация csr запроса в zimbra
- Генерация группы strong dh (diffie-hellman)
- Если нужно добавить поддомен или домен в сертификат
- Если нужно получить сертификат для домена без сайта…
- Зависимости
- Шаг 1. установите certbot на centos 8
- Замена сертификата ssl на сервере zimbra — сайт одного devopsa
- Запрашиваем новый сертификат zimbra
- Использование let’s encrypt для внутренних серверов
- Команды acme.sh для обновления сертификатов let’s encrypt
- Настройка nginx
- Настройка веб-сервера
- Обновление скрипта letsencrypt
- Подготовим nginx к получению сертификатов
- Подготовительные работы по установке и конфигурированию веб-сервера nginx
- Подготовка
- Получаем ssl-сертификат
- Получаем сертификаты
- Предварительная подготовка
- Проверим полученный сертификат
- Продление сертификатов
- Расположение сертификата
- Регистрация в let’s encrypt
- Создание виртуального хоста
- Создание сертификата
- У let’s encrypt обнаружили баг — нужно принудительно обновить ssl-сертификат
- Установка nginx
- Установка в jessie
- Установка сертификата ssl
- Шаг 1 — установка клиента letsencrypt
- Шаг 2 — получение сертификата
- Шаг 4 — настройка автопродление
- Conclusion
Почему лучше рассчитывать на sni?
Это просто. Вам не нужно постоянно держать в голове факты о выданных сертификатах. Для какого домена сертификат был выдан первым. К какому сертификату нужно добавлять еще домены. И так далее… Ни о чем таком со SNI не нужно думать.
- Секреты остаются секретами. Если у вас для всех доменов один сертификат, то любой сможет очень легко увидеть весь список, независимо от вашего желания. Если же для каждого сайта свой сертификат, то такой проблемы нет.
Например, так можно посмотреть домены в сертификате Тематических Медиа:
Получаем Cloudflare API токен
Для начала, нам необходимо зарегистрироваться в Cloudflare и получить там API токен. Эти действия нам необходимы для свидетельства нашего права на владение доменом (для Let’s Encrypt). После регистрации в сервисе, заходим в панель управления Cloudflare и получим API токен, выполнив следующие действия (см. скриншоты ниже):
"Create Token” > “Edit zone DNS” > Use template:
Убедитесь, что вы настроили DNS разрешения для редактирования и включили зону для своего доменного имени, (например, для letsencrypt.co.ua), см. скриншот:
После этого, нажмите “Continue to summary”, чтобы увидеть “Edit zone DNS API token summary”.
В конце, скопируйте токен, который вы увидите на экране, для получения доступа к Cloudflare API. Держите этот токен в секрете.
Проверяем правильную работу токена командой:
1: установка зависимостей
Обновите индекс пакетов:
sudo apt-get update
Установите git, чтобы загрузить пакет Let’s Encrypt:
sudo apt-get install git
Примечание: Чтобы узнать, что такое git, прочтите эту статью.
Настройка автопродления сертификатов
Тут всё просто, точнее даже очень просто.
Создаем исполняемый bash скрипт
следующего содержания:
и размещаем его в crontab:
добавляем запись
Нажимаем Ctrl O и нажимаем Enter.
В результате каждую неделю скрипт будет запускаться и проверять необходимость обновления сертификатов. В случае такой необходимости сертификаты автоматически будут обновлены и будет запущен хук обновляющий конфигурацию сервера nginx (в моём случае)
Инсталлируем acme.sh клиент
На следующем этапе, необходимо установить клиент acme.sh, для этого выполним следующие команды (клонируем репозиторий acme.sh с помощью команды git):
2: загрузку клиента let’s encrypt
Теперь нужно загрузить клиент Let’s Encrypt из официального репозитория и поместить полученные файлы в специально отведённое место на сервере (это упростит обновление сертификата).
Примечание: На момент написания статьи клиент Let’s Encrypt все еще находится в бета-версии; следите за обновлениями клиента, чтобы устранить ошибки и внедрить новые функции.
Клонируйте репозиторий Let’s Encrypt в каталог /opt. Это стандартный каталог для хранения сторонних программ в системах Unix.
Выпускаем Let’s Encrypt wildcard сертификат
После установки и конфигурации веб-сервера Nginx, получения Cloudflare API токена и инсталляции acme.sh, самое время приступить к выпуску wildcard сертификата для домена letsencrypt.co.ua.
Перейдем в каталог cd /root/.acme.sh для дальнейших действий.
Сначала настроим CF_Token с помощью команды экспорта следующим образом:
# Export single variable for the CloudFlare DNS challenge to work # export CF_Token="Your_Cloudflare_DNS_API_Key_Goes_here"
Определять переменные оболочки CF_Account_ID и CF_Zone_ID нам не нужно, так как они будут автоматически извлечены файлом acme.sh. Затем запросим сертификат для домена:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Если вы работаете с криптографией на основе эллиптических кривых (ECC/ECDSA) вместо RSA, то синтаксис команды будет следующим:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength ec-384 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Наш ключ Cloudflare DNS API находится в файле /root/.acme.sh/account.conf, проверить его возможно с помощью команды cat или grep:
cat /root/.acme.sh/account.conf grep '_CF_' /root/.acme.sh/account.conf
3: настройка приложения
Настройка приложения для поддержки SSL выходит за рамки данного мануала, так как у каждого приложения разные требования и параметры конфигурации.
Конфигурируем веб-сервер Ngnix
На этом этапе нам необходимо убедиться в том, что файл обмена ключами Диффи-Хеллмана уже создан:
mkdir -pv /etc/nginx/ssl/letsencrypt.co.ua/ openssl dhparam -out /etc/nginx/ssl/dhparams.pem 4096 acme.sh --issue --nginx --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua
Затем создадим и отредактируем файл конфигурации для нашего домена letsencrypt.co.ua:
nano /etc/nginx/conf.d/letsencrypt.co.ua.conf
Занесем туда следующие строки:
Инсталлируем Let’s Encrypt wildcard сертификат
Сейчас необходимо приступить к установке сертификата (при необходимости, замените команду systemctl reload nginx, в соответствии с инструкцией к вашему дистрибутиву Linux):
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer"
--key-file "${CONFIG_ROOT}/$DOMAIN.key"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer"
Если вы используете ECC/ECDSA, то синтаксис команды будет выглядеть следующим образом:
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--ecc
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer.ecc"
--key-file "${CONFIG_ROOT}/$DOMAIN.key.ecc"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer.ecc"
Автоматическое продление Let’s Encrypt wildcard сертификата
Обновление будет происходить автоматически через cronjob, чтобы просмотреть все задания в cron, введите команду:
crontab -l
Отобразится примерно следующая информация (см. скриншот ниже):
8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
Если возникнет необходимость, мы можем произвести обновление вручную:
./acme.sh --renew --force --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*. letsencrypt.co.ua'
В следующем разделе мы опишем подробнее как продлить ssl сертификат.
Caveat emptor
Всё знаете про SNI? Читайте сразу про установку.
Deploy the lets encrypt ssl certificate for zimbra mail
Before we proceed with deployment, we take a backup of the SSL folder.
Now we copy the private key under Zimbra SSL commercial path
cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.keyError: letsencrypt challenge request 429
- Попробуйте удалить домен из панели VestaCP и добавить его снова, после чего повторить попытку выпуска сертификата.
- Повторите попытку выпуска сертификата через 1 час.
Errors when installing let’s encrypt
Usually, we face error when installing let encrypt when Varnish cache is installed in the server. To resolve the error we stop the varnish cache service during the installation. We use the command
service varnish stopAfter the installation, we start the service back.
Google и startssl
В виду последних событий, у Google есть претензии к WoSign и StartCom, и все сертификаты выпущенные после 21 октября 2021 года, в браузере Google Chrome 56 версии, все равно помечаются как небезопасные с пометкой NET::ERR_CERT_AUTHORITY_INVALID. Так, что советую присмотреться к проекту , одним из спонсоров, которого является Google.
Verify the letsencrypt certificate for zimbra mail
The next step is to verify the LetsEncrypt certificate. To do this, first, we create a folder at the location.
mkdir /opt/zimbra/ssl/letsencryptNext, we copy the certificate to the newly created folder.
cp /etc/letsencrypt/live/domainname/* /opt/zimbra/ssl/letsencrypt/Then we change the ownership for the certificate to Zimbra using the command
chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*Now to verify the commercial certificate using the command.
Zimbra letsencrypt
Let’s Encrypt is an automated certificate authority providing SSLs free of charge.
Its main purpose is to allow people to encrypt their internet traffic at no cost, easily, and automatically.
The certificate is valid for 90 days, during which renewal can take place at any time.
Let’s Encrypt is widely used by the customer to protect the Zimbra mail.
Let us discuss how our Support Engineers install let’s Encrypt certificate for the mail server.
Zimbra letsencrypt how to install it
First, we stop the jetty or Nginx service at Zimbra level using the command
su zimbra
zmproxyctl stop
zmmailboxdctl stopАвтообновление сертификатов let’s encrypt
И очередной раз я посыпаю голову пеплом, так как вот уже около года на одном из моих пет-прожектов spaceismine.org протух Let’s Encrypt сертификат, а я даже и не думал шевелиться. Что ж, рано или поздно всё равно нужно исправляться. Приступаю.
Бегло заглянув на сайт этого замечательного проекта с бесплатными сертификатами, я отыскал нужный себе раздел и примерно понял, что нужно делать. Год развития проекта дал о себе знать, теперь существует прокачанная утилита, распространяемая через deb-пакет. Ставим её.
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install letsencrypt
Да, приходится подключать отдельный PPA, так как в Ubuntu 16.04 (которая у меня) этот пакет довольно старый, и в нём нет поддержки ключа --post-hook, который нам понадобится ниже.
Судя по всему, написано там всё на питоне. Итак, поставив certbot, я сделал для проверки успешности своих намерений dry-run запуск (так называемый запуск вхолостую, который по факту ничего не делает, а только показывает отчёт), как это предлагалось в документации certbot.
sudo letsencrypt renew --dry-run --agree-tos
Processing /etc/letsencrypt/renewal/spaceismine.org.conf
** DRY RUN: simulating 'letsencrypt renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/spaceismine.org/fullchain.pem (success)
** DRY RUN: simulating 'letsencrypt renew' close to cert expiry
** (The test certificates above have not been saved.)
Success-success, успех-успех! Ну, дальше можно было уже запустить и полноценное обновление сертификата.
sudo letsencrypt renew
Processing /etc/letsencrypt/renewal/spaceismine.org.conf
new certificate deployed without reload, fullchain is /etc/letsencrypt/live/spaceismine.org/fullchain.pem
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/spaceismine.org/fullchain.pem (success)
Замечательно, он говорит, что всё нам обновил. Делаем релоад нашему nginx.
sudo service nginx reload
И вот всё, сертификат обновлён, всё замечательно. Но, не буду же я раз в 3 месяца заходить обновлять его руками, поэтому я поискал информацию, как лучше всего это прикрутить на cron. Оказывается, ничего особо сложного с этим тоже не было.
sudo crontab -e
и добавляем там
42 0,12 * * * letsencrypt renew --post-hook "service nginx reload"“Зачем делать два раза в день?” спросите вы. Да, это довольно часто, но я столкнулся с мнениями, что в этом нет ничего такого, так как certbot ничего не делает, если сертификат по факту пока обновлять не требуется. Момент необходимости обновления сертификата наступает за 30 дней до его истечения.
Убеждаемся напоследок, что команда cron работает. Многие годы работы с cron научили меня это делать в обязательном порядке.
sudo letsencrypt renew --post-hook "service nginx reload"
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/spaceismine.org.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/spaceismine.org/fullchain.pem (skipped)
No renewals were attempted.
No hooks were run.
Итак, похоже всё хорошо и всё работает. На этом завершаю свою заметку про автоматическое обновление сертификатов Let’s Ecnrypt.
- Моя прошлогодняя статья про первоначальную настройку Let’s Encrypt
- Сайт certbot
- Сайт проекта Let’s Encrypt
Вот и всё
Если вам близки по духу tee и sed, то есть гораздо более короткая инструкция по настройке связки Let’s Encrypt и nginx, при условии корректно настроенного hostname. Только копируй команды и вставляй.
Выпуск и настройка сертификата для панели управления vestacp
Поддержка Let’s Encrypt доступна в VestaCP из коробки.
Для выпуска и установки сертификата вы можете отметить дополнительные опции сразу при добавлении домена в разделе WEB панели VestaCP:
Или отредактировать настройки домена в разделе WEB, выбрав опции поддержки SSL уже после добавления:
Выпуск и автоматическая установка сертификата занимают до 5 минут. После этого данные SSL-сертификата будут доступны также в настройках домена.
Помимо этого, добавляется cron-задание для автоматического обновления сертификатов, истекающих через 30 и менее дней. Проверить это можно в разделе CRON панели VestaCP:
Генерация csr запроса в zimbra
Для генерации Certificate Signing Request у нас два варианта, первый это через консоль, второй это через веб интерфейс, я вам настоятельно рекомендую уметь оба варианта.
Если вы получили ошибку Subject does not start with ‘/’. problems making Certificate Request, то попробуйте вот такую команду:
/opt/zimbra/bin/zmcertmgr createcsr comm -new -subject “/C=RU/ST=Moscow/L=Moscow/O=ANO AZIPI/OU=Department/CN=ваш домен” -subjectAltNames ваш домен
** Generating a server csr for download comm -new -subject /C=RU/ST=Moscow/L=Moscow/O=ANO AZIPI/OU=Department/CN=ваш домен -subjectAltNames ваш домен** Creating /opt/zimbra/conf/zmssl.cnf…done** Backup /opt/zimbra/ssl/zimbra to /opt/zimbra/ssl/zimbra.
Выбираем имя вашего сервера.
Заполняем нужные поля.
Скачиваем файл CSR запроса.
Генерация группы strong dh (diffie-hellman)
Обмен ключами Diffie-Hellman (DH) – это метод безопасного обмена криптографическими ключами по незащищенному каналу связи.
Создайте новый набор 2048-битных параметров DH, введя следующую команду:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Если вы хотите, вы можете изменить длину ключа до 4096 бит, но генерация может занять более 30 минут, в зависимости от энтропии системы.
Если нужно добавить поддомен или домен в сертификат
Если вы вдруг забыли указать поддомен www, или вам нужно добавить другой домен или поддомен в сертификат (которых может быть до 100 в одном сертификате), то это легко сделать после получения сертификата. Просто запустите команду еще раз, добавив требуемое имя:
Если нужно получить сертификат для домена без сайта…
Типичный пример — сертификат для выделенных под SMTP или IMAP серверов, на которых вообще нет каких-то сайтов. Либо используйте универсальный переадресатор что выше, либо…
Зависимости
3. Nginx установлен и работает на веб-сервере.
Вы можете подтвердить это, войдя в терминал и выполнив команду, показанную ниже.
Из URL мы можем ясно видеть, что сайт не защищен и, следовательно, не зашифрован.
Это подразумевает, что любые запросы к веб-серверу могут быть перехвачены, что включает в себя важную и конфиденциальную информацию, такую как имена пользователей, пароли, номера социального страхования и данные кредитной карты.
Теперь давайте запачкаем руки и установим Lets Encrypt.
Шаг 1. установите certbot на centos 8
Для установки сертификата Let Encrypt вам прежде всего необходимо установить certbot.
Это расширяемый клиент, который получает сертификат безопасности от Let Encrypt Authority и позволяет автоматизировать проверку и настройку сертификата для использования веб-сервером.
Загрузите certbot с помощью команды curl.
Замена сертификата ssl на сервере zimbra — сайт одного devopsa
Установка сертификата SSL через Zimbra Certificate Manager. Пакет Zimbra имеет инструмент «zmcertmgr» для управления сертификатами SSL Для версии 8.6 или ниже этот скрипт должен выполняться от root.
Начиная с версии 8.7 этот скрипт запускается от пользователь zimbra. Запустите эти команды, чтобы переключиться с пользователя по умолчанию на пользователя zimbra:
su zimbraЧтобы начать процесс установки, необходимо загрузить файл сертификата SSL commercial.crt, файл корневого сертификата CA commercial_ca.crt и приватный ключ commercial.key в любую папку на ваш почтовый сервер.
В этом примере файлы SSL загружены в каталог /opt/zimbra/ssl/zimbra/commercial/
Убедитесь, что ваш сертификат, полученный от центра сертификации, соответствует закрытому ключу, созданному вместе с CSR:
/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.key /opt/zimbra/ssl/zimbra/commercial/commercial.crt /opt/zimbra/ssl/zimbra/commercial/commercial_ca.crtповторюсь, что запускать проверку следует от пользователя zimbra
Развернуть свой коммерческий сертификат.
/opt/zimbra/bin/zmcertmgr deploycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.crt /opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt
Убедиться, что правильный сертификат был развернут. Информация о сертификате PositiveSSL выглядеть так

Чтобы применить изменения, необходимо перезапустить службы Zimbra
su zimbra
zmcontrol restartКогда все службы перегрузятся, новые данные сертификата SSL можно будет проверить с помощью этого онлайн-инструмента.
Посмотреть сертификат можно так же через админ консоль в браузере
Запрашиваем новый сертификат zimbra
С проблемой мы определились, осталось перевыпустить сертификат для почтового сервера. На выбор у нас два варианты:
Использование let’s encrypt для внутренних серверов
Let’s Encrypt — это центр сертификации, который предоставляет бесплатные сертификаты в полностью автоматизированном процессе. Эти сертификаты выдаются по протоколу ACME. За последние два года в Интернете широко использовалась технология Let’s Encrypt — более 50% веб-сертификатов SSL / TLS теперь выдает Let’s Encrypt.
В этом посте описывается, как выдавать сертификаты Let’s Encrypt для внутренних серверов.
Хотя и существует множество инструментов для автоматического обновления сертификатов для общедоступных веб-серверов (certbot, simp_le, я писал о том, как это сделать), трудно найти какую-либо полезную информацию о том, как выдавать сертификаты для внутренних серверов, не подключенных к Интернету, и / или устройства с Let’s Encrypt.
В Datto мы выдали сертификат на каждую из наших 90 000 устройств BCDR, использующих именно этот механизм.
Содержание
- Как это работает?
- Пример: внутренний сервер 10.1.1.4, он же. xi8qz.example.com
2.1. Предварительные требования: назначение домена для каждой машины (шаги 1-3)
2.2. Запрос сертификата (шаги 4-14) - Рекомендации по развертыванию: ограничения скорости Let’s Encrypt.
Hello Hacker News, впервые на главной странице HN! Для меня это большая честь! Я ответил на все вопросы в разделе комментариев.
Если вы ищете реализацию этой идеи, вам может быть интересен localtls. Я сам не тестировал, но похоже, что он делает то же самое, что я здесь описываю.
Как это работает?
Чтобы выпустить сертификат с помощью Let’s Encrypt, вы должны доказать, что вы либо являетесь владельцем веб-сайта, для которого хотите выпустить сертификат, либо владеете доменом, на котором он работает. Обычно автоматизированные инструменты, такие как certbot, используют HTTP-запрос для подтверждения права собственности на сайт с использованием.well-knownкаталога. Хотя это прекрасно работает, если сайт подключен к Интернету (и Let’s Encrypt может проверять файлы HTTP-запросов с помощью простого HTTP-запроса), он не работает, если ваш сервер работает на10.1.1.4или на любом другом внутреннем адресе.DNS решает эту проблему, позволяя подтвердить право собственности на домен с помощью
TXT-записи DNS_acme-challenge.example.com. Let’s Encrypt проверит, что запись соответствует ожидаемому, и выдаст ваш сертификат, если все сложится.Итак, действительно волшебными ингредиентами для выдачи сертификатов для внутренних компьютеров, не подключенных к Интернету, являются:
Пример: внутренний сервер 10.1.1.4, он же. xi8qz.example.com
На следующей диаграмме показано, как мы реализовали интеграцию Let’s Encrypt для наших устройств резервного копирования Datto. Каждое устройство (читайте: внутренний сервер) находится за NAT и имеет собственный локальный IP-адрес.
Общий подход прост: устройство регулярно обращается к нашему серверу управления, чтобы обеспечить доступ к нему через его собственный поддомен. Если его локальный IP-адрес изменяется, он запускает обновление своего собственного поддомена. Кроме того, он регулярно проверяет, действителен ли сертификат, и запрашивает обновление, если он устарел.
Вот немного подробностей об этом процессе:

Участники этого процесса:
В этом примере предположим, что мы пытаемся выпустить сертификат для устройства с идентификатором xi8qz и локальным IP-адресом 10.1.1.4. С точки зрения этого устройства необходимо сделать два запроса:
2.1. Предварительные требования: назначение домена для каждой машины (шаги 1-3)
Как упоминалось выше, нам нужно дать каждому устройству правильное доменное имя, чтобы иметь возможность подтвердить право собственности на Let’s Encrypt, поэтому нам нужно купить домен (здесь: example.com) и делегировать его NS-записи нашему серверу DDNS:
$ dig short NS example.com
ddns1.mycompany.com.Вдобавок к этому нам нужна возможность динамически добавлять и удалять записи из него (через какой-то API). Я ранее писал о том, как развернуть собственный DDNS-сервер, если вам интересно.
После того, как все это настроено, нам нужно убедиться, что запись A машины обновляется при изменении ее IP-адреса. Для нашей внутренней машины давайте назначим xi8qz.example.com в качестве домена. Если все работает правильно, вы сможете разрешить этот домен по его IP-адресу, используя обычный DNS-запрос:
$ dig short xi8qz.example.com
10.1.1.42.2. Запрос сертификата (шаги 4-14)
Предполагая, что теперь вы полностью контролируете зону DNS для example.com и можете быстро редактировать ее динамически, у вас все готово для фактической выдачи сертификатов для вашего локального домена устройства через Let’s Encrypt.
В нашем примере устройства оно будет регулярно проверять, действителен ли существующий сертификат (шаг 4). Если сертификата нет или срок действия существующего скоро истечет, устройство сгенерирует пару ключей и запрос на подпись сертификата (CSR), используя назначенное ему имя хоста (здесь: xi8qz.example.com) в качестве CN, и оно отправит этот CSR на управляющий сервер (шаг 5).
После авторизации запроса (важный шаг, не показанный на схеме!), Управляющий сервер запрашивает DNS-запрос для данного домена из ACME API через вызов Pre-Authorization / new-authz API (шаг 6). ACME API отвечает запросом DNS (шаг 7). Если все идет хорошо, это выглядит примерно так:
{
"identifier": {
"type": "dns",
"value": "xi8qz.example.com"
},
"status": "pending",
"expires": "2021-04-15T21:26:29Z",
"challenges": [
{
"type": "dns-01",
"status": "pending",
"uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/VtjihR4X8nLAj4MDwI...",
"token": "aLptEKAeUOajkiGrx-kkbjUX4b1MC..."
},
// ...
],
// ...
}Используя этот ответ, управляющий сервер должен установить запись DNS TXT на _acme-challenge.xi8qz.example.com (шаг 8) и уведомить ACME API о том, что ответ на запрос был размещен (шаг 9).
После того, как ответ на запрос был проверен с помощью Let’s Encrypt (шаг 10-11), сертификат можно, наконец, запросить с помощью CSR (шаг 12-13).
После того, как Let’s Encrypt ответит сертификатом, вы увидите на проводе что-то вроде этого:
-----BEGIN CERTIFICATE-----
MIIGEjCCBPqgAwIBAgISAyk2izMz7OXSqHeZhg rUR5uMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
...Если декодировать с помощью openssl, мы увидим, что это настоящая сделка:
$ openssl x509 -in www.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
03:29:36:8b:33:33:ec:e5:d2:a8:77:99:86:0f:ab:51:1e:6e
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
Validity
Not Before: Jul 18 23:37:35 2021 GMT
Not After : Oct 16 23:37:35 2021 GMT
Subject: CN=xi8qz.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:be:69:df:28:04:9c:2b:e9:94:72:c3:de:a6:fd:
a4:38:93:be:43:a7:81:8b:dc:9a:be:19:0d:c0:d1:
...Этот сертификат затем возвращается в машину (шаг 14). После перезапуска веб-сервера устройства / сервера к его веб-интерфейсу можно будет получить доступ через HTTPS в браузере или из командной строки:
$ curl -v https://xi8qz.example.com/login
* Trying 10.1.1.4...
* TCP_NODELAY set
* Connected to xi8qz.example.com (10.1.1.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=xi8qz.example.com
* start date: Jul 18 23:37:35 2021 GMT
* expire date: Oct 16 23:37:35 2021 GMT
* subjectAltName: host "xi8qz.example.com" matched cert's "xi8qz.example.com"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET /login HTTP/1.1
> Host: xi8qz.example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 05 Aug 2021 17:38:49 GMT
< Server: Apache/2.4.18 (Ubuntu)
...Рекомендации по развертыванию: ограничения скорости Let’s Encrypt.
Важно отметить, что если вы планируете реализовать этот механизм для большого количества серверов, вы используете staging среды Let’s Encrypt для тестирования и, что более важно, учитываете лимиты выдачи сертификатов.
По умолчанию Let’s Encrypt позволяет выдавать только 20 сертификатов (в 2021 году) в неделю для одного и того же домена или одной и той же учетной записи. Чтобы увеличить это число, вы должны либо запросить более высокий лимит выдачи, либо добавить свой домен в список общедоступных суффиксов (обратите внимание: добавление вашего домена здесь имеет другие последствия!).
Из-за этих ограничений скорости жизненно важно, чтобы вы распределили начальное развертывание настолько, чтобы оставаться ниже ограничения скорости, и чтобы вы оставили достаточно места для добавления будущих серверов. Также рассмотрите возможность продления в первоначальном плане развертывания.
Резюме
Как видите, это не так уж и сложно.
Сначала мы присвоили каждому устройству (так называемому внутреннему серверу) публичное доменное имя, используя наш собственный динамический DNS-сервер и выделенную зону DNS. Используя домен, назначенный серверу (здесь:
xi8qz.example.com), мы затем использовали предложение бесплатного сертификата Let’s Encrypt и их запрос DNS, чтобы выпустить сертификат для этого сервера.
Сделав это для всех внутренних серверов, мы можем обеспечить безопасную связь в нашей внутренней ИТ-инфраструктуре без необходимости развертывания настраиваемого сертификата CA или необходимости платить за сертификаты.
Интересные Github проекты по этой теме:
https://github.com/RealTimeLogic/SharkTrust
https://github.com/joohoi/acme-dns
https://github.com/skoerfgen/CertLE
https://github.com/Corollarium/localtls
Команды acme.sh для обновления сертификатов let’s encrypt
Общий синтаксис:
acme.sh -f -r -d {your-domain-here}
acme.sh --force --renew --domain {your-domain-name-here}
Пример использования команды для нашего домена:
acme.sh -f -r -d letsencrypt.co.ua
Где:
--renew ИЛИ -r: продлить сертификат; --domain ИЛИ -d: указывает домен; --force ИЛИ -f: используется для принудительного выпуска или немедленного обновления сертификата.
После проведения работ по выпуску или принудительному продлению сертификата необходимо перезапустить веб-сервер (Nginx или Apache) с помощью следующих команд (в соответствии с инструкцией к вашему дистрибутиву Линукс).
Для Nginx:
sudo service nginx reload
Для Apache:
Настройка nginx
В итоге наш конфиг будет выглядеть так
Настройка веб-сервера
Я не буду здесь описывать настройку веб-сервера, т.к. мой кусок конфига вряд ли подойдет вам.
Вы сами должны найти настройку SSL для вашей версии веб-сервера и CMS.
Обновление скрипта letsencrypt
Скачиваем изменения для GitHub репозитория letsencrypt
$ cd /opt/letsencrypt
$ sudo git pullПодготовим nginx к получению сертификатов
В общем случае для получения сертификата необходимо во всех блоках server добавить следующий блок до других блоков location:
location /.well-known {
root /var/www/html;
}Понятно, что вписывать для каждого сайта такой блок явно — это моветон, потому создадим файл /etc/nginx/acme с содержанием блока выше.
# cat /etc/nginx/acme
location /.well-known {
root /var/www/html;
}Затем для каждого домена и поддомена, для которых нужно получить сертификаты, в блоке server перед всеми блоками location укажем:
include acme;Хосты-редиректоры (например, с голого домена на www) можно пропустить. ACME сервер обязан учитывать стандартную переадресацию. Подробней об этом ниже.
Перезагрузим nginx и проверим что наш тестовый файл виден:
Подготовительные работы по установке и конфигурированию веб-сервера nginx
Все действия будем проводить с тестовым доменом letsencrypt.co.ua. Перед тем, как начать процесс установки, необходимо выполнить обновления на серверной ОС Ubuntu:
apt update && apt full-upgrade –y
Затем установим веб-сервер Nginx:
1) Команда для OC Ubuntu:
sudo apt install nginx
2) Команда для OC CentOS:
sudo yum install nginx
Затем наш домен нужно добавить в качестве виртуального хоста на веб-сервер Nginx, для этого проделаем следующие действия:
1) Создаем каталог для нового сайта, вместо letsencrypt.co.ua подставьте имя своего домена (параметр -p необходим для автоматической генерации каталогов):
mkdir -p /var/www/letsencrypt.co.ua/public_html
2) Выставим права на папку, чтобы у нас была возможность чтения файлов в ней:
chmod 755 /var/www
3) В редакторе nano создаем новый файл index.html в уже созданном нами каталоге:
nano /var/www/letsencrypt.co.ua/public_html/index.html
4) Помещаем в файл следующий исходный код:
5) Сейчас отредактируем файл с настройками ngnix:
nano /etc/nginx/conf.d/virtual.conf
Необходимо вписать следующие строки в файл (указать имя домена, корневую папку и т.д.):
#
# A virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 80;
# listen *:80;
server_name letsencrypt.co.ua;
location / {
root /var/www/letsencrypt.co.ua/public_html/;
index index.html index.htm;
}
}
6) Теперь отредактируем файл nano /etc/hosts (пропишем соответствие нашего домена IP-адресу VPS):
#Virtual Hosts 178.20.153.253 letsencrypt.co.ua
7) Для того, чтобы все наши настройки вступили в силу, выполним рестарт Nginx командой:
/etc/init.d/nginx restart
8) Чтобы проверить, работает ли наш сайт и привязан ли он к IP, откроем браузер и наберем:
letsencrypt.co.ua
Как мы видим на скриншоте ниже, наша тестовая страница отображается, значит все настроено правильно.
Подготовка
Устанавливаем пакеты
$ sudo yum -y install git bcКлонируем GitHub репозиторий letsencrypt в каталог /opt/letsencrypt
Получаем ssl-сертификат
Переходим в каталог
$ cd /opt/letsencryptЗапускаем скрипт
Получаем сертификаты
У Let’s Encrypt есть лимиты на количество обращений за сертификатами, потому сначала попробуем получить необходимый сертификат в режиме для тестов:
Предварительная подготовка
Вам необходимы:
Проверим полученный сертификат
Убедимся что полученный сертификат — именно тот, что нам нужен:
Продление сертификатов
Сертификаты выдаются на три месяца. Не на полгода, не на год, а лишь на три месяца. Естественно это вызывает вопросы. Нужно ли проходить всю эту процедуру через три месяца? Нужно ли это делать всегда до искончания веков? Может стоит всё-таки вложиться в платный сертификат чтобы забыть об этом всем и не воспоминать пару лет?
Но нет, не спешите искать платежные средства! Как и было обещано в начале статьи, с обновлением сертификатов проблем нет.
Расположение сертификата
В zimbra, сам сертификат (закрытый ключ) должен лежать по пути /opt/zimbra/ssl/zimbra/commercial/commercial.key. Я для удобства, сюда же положил и открытый ключ и ключ цепочки.
Чтобы проверить цепочку, выполните команду:
/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.key /opt/zimbra/ssl/zimbra/commercial/commercial.crt /opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt
В моем случае я получил ошибку, что сертификат истек.
** Verifying /opt/zimbra/ssl/zimbra/commercial/commercial.crt against /opt/zimbra/ssl/zimbra/commercial/commercial.keyCertificate (/opt/zimbra/ssl/zimbra/commercial/commercial.crt) and private key (/opt/zimbra/ssl/zimbra/commercial/commercial.key) match.
Регистрация в let’s encrypt
Регистрацию нужно сделать только один раз:
Создание виртуального хоста
По умолчанию Nginx настроен на загрузку всех файлов конфигурации, заканчивающихся на .conf, из каталога /etc/nginx/conf.d/
Создание сертификата
В отличии от других способов валидации, здесь сертификат создается легко и быстро. Вместо example.org укажите свой домен.
У let’s encrypt обнаружили баг — нужно принудительно обновить ssl-сертификат

29 февраля 2020г у Let’s Encrypt был обнаружен баг в коде CAA, который появлялся во время выпуска сертификатов. Подробности бага можно найти на официальном форуме.
Что нужно чтобы устранить его?
На текущий момент выявленный баг уже исправлен, но часть выпущенных сертификатов будут отозваны уже 4 марта 2020г. В случае, если сертификат подлежит отзыву, от Let’s Encrypt придет соответствующее уведомление следующего вида:
We recently discovered a bug in the Let’s Encrypt certificate authority code,
described here:
https://community.letsencrypt.org/t/2020-02-29-caa-rechecking-bug/114591
Unfortunately, this means we need to revoke the certificates that were affected
by this bug, which includes one or more of your certificates. To avoid
disruption, you’ll need to renew and replace your affected certificate(s) by
Wednesday, March 4, 2020. We sincerely apologize for the issue.
If you’re not able to renew your certificate by March 4, the date we are
required to revoke these certificates, visitors to your site will see security
warnings until you do renew the certificate. Your ACME client documentation
should explain how to renew.
If you are using Certbot, the command to renew is:
certbot renew –force-renewal
If you need help, please visit our community support forum:
https://community.letsencrypt.org/t/revoking-certain-certificates-on-march-4/114864
Please search thoroughly for a solution before you post a new question. Let’s
Encrypt staff will help our community try to answer unresolved questions as
quickly as possible.
Your affected certificate(s), listed by serial number and domain names:
03c77677fcf52b900f8d85646f7ffc7fc121: *.test.ru test.ru
Для решения проблемы нужно просто произвести принудительное обновление SSL-сертификата тем клиентом, которым его выпускали ранее, или произвести перевыпуск сертификата при помощи любого другого клиента. Наши команды уже приступили к обновлению сертификатов на серверах наших клиентов.
Проверить нужно ли перевыпускать сертификат или нет, можно по следующей ссылке.
Установка nginx
Nginx доступен в репозиториях CentOS по умолчанию.
# dnf install nginxВключите и запустите службу Nginx.
# systemctl enable nginx
# systemctl start nginx
Установка в jessie
Если у вас еще в ходу актуальный на конец 2021 года Debian stable “jessie”, то всё лишь немного сложнее.
Установка сертификата ssl
Переходим к проекту Letsencrypt, куда мы клонировали файлы. И запускаем генерацию сертификатов командой letsencrypt-auto certonly, используя плагин webroot.
Шаг 1 — установка клиента letsencrypt
Итак, что мы имеем:— Веб сервер под управлением CentOS, Nginx;— Установленные программы Git, Bc.
На всякий случай:
sudo yum -y install git bc
После того, как git и bc установлены, переходим к клонированию проекта letsencrypt из GitHub.
Шаг 2 — получение сертификата
Letsencrypt предоставляет множество способов получения SSL-сертификатов с помощью различных плагинов. В отличии от плагина Apache, который устанавливается автоматически, нам придется ставить сертификат вручную.
Шаг 4 — настройка автопродление
Сертификаты действительный 90 дней, но рекомендуется продлевать сертификаты каждые 60 дней. Мы это автоматизируем с помощью cron.
Чтобы запустить процесс обновления для всех установленных доменов, выполните следующую команду:
/opt/letsencrypt/letsencrypt-auto renew
Так как мы недавно установили сертификат, то команда будет проверять только дату истечения срока действия и распечатает сообщение, информирующее о том, что сертификат не нуждается в продлении. Вы увидите примерно следующие в консоли:
Conclusion
In short, we just discussed the installation of Let’sEncrypt certificate. Also, we saw how our Support Engineers setup let’s Encrypt certificate for the Zimbra server.
