Получение сертификатов Let'sEncrypt

Как сказано на главной странице letsencrypt.org :
"Let’s Encrypt is a free, automated, and open Certificate Authority" то есть это бесплатный, автоматизированный и открытый Центр Сертификации.
В нем можно получить бесплатный сертификат для работы домена по https протоколу, который будет поддерживаться всеми современными браузерами, причем процесс обновления сертификата можно автоматизировать. Естественно, существуют ограничения, подробнее тут https://letsencrypt.org/docs/rate-limits.
Как это работает, в двух словах.
На сервере, для которого требуется получить сертификат на домен, устанавливается программа-агент, которая сначала подтверждает для СА(центра сертификации) что веб сервер контролирует этот домен. После успешного подтверждения агент может получать, обновлять и отзывать сертификаты.
Идентификация администратора сервера происходит по публичному ключу. Вначале программа-агент, взаимодействуея с Lets Encrypt CA, генерирует новую пару ключей для подтверждения того что сервер контролирует один или несколько доменов. Существуют различные способы подтверждения. Один из них подразумевает настройку веб сервера таким образом чтобы агент имел доступ в определенный каталог веб сервера. Затем Lets Encrypt CA предоставляет агенту контрольную строку которую агент шифрует своим ключом и помещает в предоставленный веб-сервером каталог. Lets Encrypt CA делает запрос к веб серверу и считывает полученную зашифрованную контрольную строку. Если после расшифровки предоставленным ключом контрольная строка совпадает, то считается что программа-агент прошла авторизацию, а пара ключей называется “authorized key pair”. Далее программа-агент может получать, обновлять и отзывать сертификаты. Подробнее https://letsencrypt.org/how-it-works.
Другой способ, не требующий настройки веб сервера, подразумевает запуск агента в режиме standalone, при котором агент поднимает собственный веб-сервер, при этом существующий веб сервер требуется предварительно отключить на время получения/обновления/отзыва сертификата.
Первый способ является более предпочтительным, т.к. он не требует простоя веб-сервера.
В моем случае система FreeBSD, веб сервер nginx, агент certbot. Подробно настройка описана тут https://certbot.eff.org/lets-encrypt/freebsd-nginx, читать внимательно.
Особенности: для настройки nginx добавляем в конфиг после

root /var/www/example.com/html;
  index index.php
  location / {
    try_files $uri $uri/ /index.html =404;
    autoindex on;
  }
что-то вроде
  location ~ /.well-known {
    allow all;
  }

Затем выполняем
 $ sudo certbot certonly --staging --webroot -w /var/www/example.com/html -d example.com
обращаем внимание на опцию --staging, которая запрашивает тестовый ( инвалидный ) сертификат, но снимает ограничения на количество запросов сертификатов, что важно для отладки. Вы будете уверены что не будете испытывать ограничений на количество запросов к Lets Encrypt пока производите отладку, если что-то не работает. Подробнее тут https://letsencrypt.org/docs/staging-environment/
После того как все заработало, выполняем еще раз, но уже для получения действительного сертификата
 $ sudo certbot certonly --webroot -w /var/www/example.com/html -d example.com
в процессе работы получаем вопрос :
What would you like to do?
-------------------------------------------------------------------------------
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
-------------------------------------------------------------------------------
на который отвечаем выбором пункта 2. После успешного завершения процедуры получаем сообщение
 - Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /usr/local/etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-08-29. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"

Для чего какой из сертификатов используется, хорошо написано тут https://certbot.eff.org/docs/using.html#where-are-my-certificates
В соответствии с этим используем в конфиге nginx следующие директивы
ssl_certificate /usr/local/etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /usr/local/etc/letsencrypt/live/example.com/chain.pem;
после чего тестируем конфиг и перезапускаем nginx.
Если все хорошо, то пробуем обновить сертификат
certbot renew --dry-run
, если все успешно, то добавляем задание в cron
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q
где строка python... вызывает псевдослучайную задержку 0-3600 секунд перед выполнением следующей команды, а -q(добавляем после того как убедимся что cron отрабатывает нармально) подавляет вывод информационных сообщений для cron.