- Чтобы добавить новый acme-клиент или проект
- Основные преимущества
- 1: установка клиента let’s encrypt
- 2: получение сертификата
- Настраиваем механизм автоматического обновления сертификатов
- 4: настройка tls/ssl на веб-сервере nginx
- 5: автоматическое обновление сертификата
- Acmev1 и acmev2
- Bash
- C
- C
- Clojure
- D
- Domino
- Docker
- Go
- Haproxy
- Java
- Kubernetes
- Lua
- Microsoft azure
- Nginx
- Node.js
- Openshift
- Perl
- Php
- Python
- Ruby
- Rust
- Windows / iis
- Server
- Библиотеки
- 4d
- C
- D
- Delphi
- Go
- Java
- .net
- Node.js
- Perl
- Php
- Python
- Ruby
- Rust
- Проекты интеграции с let’s encrypt
- Manual
- Nginx
- Obtaining and renewing let’s encrypt ssl certificate
- Ocsp stapling
- Perfect forward secrecy
- Ssl сертификат let’s encrypt для вручную. | goodigy
- Standalone
- Webroot
- Yet another инструкция по получению ssl-сертификата let’s encrypt
- Автообновление let’s encrypt ssl сертификата
- Быстро и просто получаем let’s encrypt ssl сертификат в windows — v0lk est narod
- Вот и всё
- Генерация группы strong dh (diffie-hellman)
- Запуск let’s encrypt
- Использование let’s encrypt для внутренних серверов
- Использование плагина webroot
- Кеш tls сессий
- Конфигурационный файл let’s encrypt
- Настройка
- Настройка ssl в nginx
- О недостатках let’s encrypt
- Обновление уже созданного сертификата
- Подготовка
- Поддержка старых клиентов
- Получаем сертификаты
- Проверка порта 80
- Программная реализация
- Продление ssl сертификата
- Продление сертификатов
- Устанавливаем ssl сертификат let’s encrypt (инструкция)
- Установка
- Установка git и bc
- Установка ssl сертификата для apache
- Установка сертификатов в nginx
- Шаг 1 – активируем ssh доступ
- Шаг 2 – установка клиента acme и composer
- Шаг 2: создание сертификата
- Шаг 3 – генерация ssl сертификата
- Шаг 4 – установка сертификата через панель управления
- Заключение
Чтобы добавить новый acme-клиент или проект
Если в нашем списке вы не нашли какой-либо ACME-клиент или проект интеграции с Let’s Encrypt, пожалуйста,
создайте pull request в наш репозиторий сайта на GitHub,
в котором обновляется файл data/clients.json.
Перед отправкой pull request-а, пожалуйста, убедитесь, что:
- Клиент соблюдает политику Let’s Encrypt в отношении товарных знаков.
- Клиент работает не в браузере, и поддерживает автоматическое обновление сертификатов.
- В вашем коммите вы добавили информацию о новом клиенте в конец соответствующего раздела
(не забудьте про раздел “ACME v2-совместимые клиенты”!). - В вашем коммите вы обновили дату в поле
lastmod, в начале файлаdata/clients.json.
Основные преимущества
бесплатно:
любой владелец сайта (в частности, доменного имени) может получить и установить доверенный TLS-сертификат Let’s Encrypt (TLS — наследник SSL);
автоматизация:
все функции установки, конфигурации и обновления проводятся в автоматическом режиме;
безопасность:
все методы шифрования Let’s Encrypt отвечают текущим стандартам;
прозрачность:
публичная доступность информации о выпуске и отзыве каждого сертификата для любого желающего;
свободно:
будет использован принцип open standard для протоколов взаимодействия с CA (certificate authority).
1: установка клиента let’s encrypt
Чтобы получить SSL-сертификат от Let’s Encrypt, нужно сначала установить клиентскую программу letsencrypt. Клонируйте официальный репозиторий проекта на GitHub.
Примечание: Вероятно, в дальнейшем программа будет доступна в пакетах.
2: получение сертификата
Let’s Encrypt предлагает несколько способов получения сертификата при помощи разных плагинов. На данный момент плагины позволяют только получить сертификат, а настройку сервера для использования этого сертификата нужно выполнить вручную; исключением является плагин для Apache, работа с которым описана здесь.
Примечание: Плагины, которые помогают получить сертификат, но не устанавливают его, называются аутентификаторами.
В данном руководстве для создания SSL-сертификата используется плагин Standalone.
Настраиваем механизм автоматического обновления сертификатов
Все сертификаты, выдаваемые Let’s Encrypt имеют срок действия в 90 дней и это его второй относительный минус. Столь короткий срок, равно как и отсутствие возможности использования wildcard, обусловлены заботой о повышении уровня безопасности сертифицируемых доменов.
Обновление всей базы полученых SSL сертификатов производится простой командой.
4: настройка tls/ssl на веб-сервере nginx
Теперь нужно настроить веб-сервер Nginx для обслуживания сертификата.
Если веб-сервер Nginx ещё не установлен, установите его при помощи команды:
sudo apt-get install nginx
Затем отредактируйте конфигурационный файл Nginx; по умолчанию он хранится в /etc/nginx/sites-available/default.
sudo nano /etc/nginx/sites-available/default
Найдите блок server, он имеет примерно такой вид:
server {listen 80 default_server;listen [::]:80 default_server ipv6only=on;root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}}
Закомментируйте или удалите строки, настраивающие этот блок для прослушивания порта 80:
listen 80 default_server;listen [::]:80 default_server ipv6only=on;
Этот блок нужно настроить для прослушивания порта 443.
Добавьте в этот блок server { следующие строки:
5: автоматическое обновление сертификата
Сертификаты Let’s Encrypt действительны в течение 90 дней, но во избежание ошибок их рекомендуется обновлять каждые 60 дней. На момент написания статьи клиент не оборудован функцией автоматического обновления сертификатов. Этот процесс можно выполнить вручную, просто запустив клиент Let’s Encrypt с использованными ранее параметрами.
Надёжный способ обеспечить своевременное обновление сертификата – это демон cron.
Вместо плагина Standalone используйте плагин Webroot; он позволяет проверить домен сервера, не останавливая веб-сервер. Плагин Webroot добавляет скрытый файл в document root веб-сервера, который необходим Let’s Encrypt CA для подтверждения домена.
Acmev1 и acmev2
Let’s Encrypt поддерживает ACMEv2 API, совместимый с финальной версией стандарта ACME.
Мы планируем постепенно отказываться от устаревшего ACMEv1 API
в 2020-2021 г. Все реализации ACME-клиента в данном списке поддерживают ACMEv2.
Bash
C
C
Clojure
D
Domino
Docker
Go
Haproxy
Java
Kubernetes
Lua
Microsoft azure
Nginx
Node.js
Openshift
Perl
Php
Python
Ruby
Rust
Windows / iis
Server
Библиотеки
4d
C
D
Delphi
Go
Java
.net
Node.js
Perl
Php
Python
Ruby
Rust
Проекты интеграции с let’s encrypt
Manual
Из названия можно догадаться, что настройка и установка SSL сертификата будет проводиться вручную 🙂 Пожалуй, сейчас это наиболее удобный вариант настройки сертификата для nginx ввиду “сыроватости” letsencrypt nginx плагина.
Nginx
Nginx – второй по популярности веб-сервер (и первый среди продвинутых пользователей) предполагает несколько иной подход к настройке. Для каждого виртуального хоста в секцию server следует добавить блок:
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}Если вы настраивали сервер по нашей инструкции, то мы рекомендуем вынести указанный блок в отдельный шаблон, например, /etc/nginx/templates/letsencrypt.conf и впоследствии подключать в конфигурацию виртуального хоста именно его и в общих чертах это должно выглядеть так:
Obtaining and renewing let’s encrypt ssl certificate
Не так давно в промышленную эксплуатацию был запущен центр сертификации Let’s Encrypt.
От всех прочих провайдеров SSL сертификатов его отличает две главные особенности.
Во-первых, Let’s Encrypt позволяет получить (и в ряде случаев даже установить) полученный сертификат в вашу систему в автоматическом режиме, а, во-вторых, сделать это совершенно бесплатно.
Сочетание этих двух факторов даёт возможность легко получить, быстро установить и забыть об обновлении полученного (одного или нескольких) SSL сертификатов в будущем.
Итак, небольшой how-to который был подготовлен на базе настройки этого самого блога.
Ocsp stapling
Браузеры кроме Chrome имеют свойство обращаться к CA для сверки со списком отозванных сертификатов, задерживая открытие страниц на секунды. Устранить эту задержку можно прикладывая подписанный ответ OCSP сервера к ответу при создании нового соединения.
Если у вас нет локального кеширующего DNS сервера, в директиве resolver следует указать IP фактически используемого DNS сервера.
Perfect forward secrecy
Для PFC и высокого результата по тесту следует отказаться от DHE шифров в пользу ECDHE.
Приоритет для AES256 понижаем для скорости, а 3DES вернём для IE 8.
Ssl сертификат let’s encrypt для вручную. | goodigy
Let’s Encrypt – это центр сертификации который предоставляет сертификаты бесплатно. Выданный сертификат действует в течении трех месяцев.
На хостинге SpaceWeb, на котором находится этот сайт, установка сертификата возможна только путем загрузки файлов сертификата, через специальную форму в панели управления.
Чтобы сгенерировать сертификат нужно воспользоваться инструкцией с сайта https://certbot.eff.org/all-instructions/. Как пишут в инструкциях, установка и продление сертификата может происходить в автоматическом режиме. Но для этого нужен shell доступ к серверу. В моем случае такого доступа нет, есть возможность устанавливать сертификат через форму. Поэтому буду генерировать и устанавливать сертификат вручную, каждые три месяца.
Для этого нам нужен линукс.
Устанавливаем certbot.
wget https://dl.eff.org/certbot-autoДелаем исполняемым
chmod a x certbot-autoТеперь запускаем
./certbot-auto certonly --manualВводим пароль
igy@IGY-COMP:~/goodigy$ ./certbot-auto certonly --manual
Requesting root privileges to run certbot...
/home/igy/.local/share/letsencrypt/bin/letsencrypt certonly --manual
[sudo] password for igy:
Вводим название доменного имени

Соглашаемся

Далее будет такой вывод
Make sure your web server displays the following content at
http://goodigy.ru/.well-known/acme-challenge/Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4E before continuing:
Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4E.tWHfAVZH3lo0KtswKbFfTFoemZaLFJvU28lAWz_3sFk
If you don''t have HTTP server configured, you can run the following
command on the target server (as root):
mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4E.tWHfAVZH3lo0KtswKbFfTFoemZaLFJvU28lAWz_3sFk > .well-known/acme-challenge/Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4E
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c
"import BaseHTTPServer, SimpleHTTPServer;
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler);
s.serve_forever()"
Press ENTER to continue
Поле этого нужно зайти на хостинг и файл, который должен быть доступен по такой ссылке
http://goodigy.ru/.well-known/acme-challenge/ Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4EСо следующим содержимым:
Ifo8D9F7lSDUmscn0u9kFluPaL2yRSwZb5VaqHk1S4E.tWHfAVZH3lo0KtswKbFfTFoemZaLFJvU28lAWz_3sFkПопробовать перейти по ссылке. Если доступа нет, то нужно открыть временный доступ, например, в .htaccess, после можно будет отключить.
Переходим в терминал, нажимаем Enter и ждем.
После того как программа отработает, будет такой вывод
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/goodigy.ru/fullchain.pem. Your cert will
expire on 2021-03-05. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
В папке /etc/letsencrypt/live/my-sertif.ru/ будут лежать файлы сертификата.
cert.pem
chain.pem
fullchain.pem
privkey.pemДля загрузки, на хостинге SpaceWeb мне понадобилось два файла cert.pem и privkey.pem.
Настройка https, а также автоматическая генерация и установка на сервер с shell-доступом будет описана в другой статье.
Standalone
Суть standalone заключается в том, что скрипт попытается поднять собственный веб-сервер на время процедуры получения сертификата (дабы подтвердить принадлежность домена), а для этого необходимо будет отключить уже работающий, дабы освободить порты 80 и 443. Для большинства веб-разработчиков данный вариант неудобен из-за необходимости отключения сайта.
Webroot
Данная опция подходит тем, кого не устраивает standalone. При указании ключа –webroot необходимо также будет указать и директорию, где располагаются файлы, которые обрабатывает веб-сервер.
$ ./letsencrypt-auto certonly --webroot -webroot-path /var/www/mydomain/
При работе с данной опцией необходимо настроить веб-сервер на чтение файлов соответствующим образом.
Yet another инструкция по получению ssl-сертификата let’s encrypt
Тема получения сертификата Let’s Encrypt уже подымалась на хабре (см.
тут
), да и в сети можно найти много рецептов разного качества.
Читал я и ужасался: одни пишут, что то нужно nginx или apache остановить («на пару минуточек всего»), другие предлагают файлы подкладывать в папку веб-сервера (в соседней ssh-сессии), третьи — о том, как важно соблюсти правильный Content-type для файлов проверки домена…
Давайте попробуем обойтись без всего этого: чтобы не было мучительно больно ни на стадии установки, ни очередном продлении — даже если придётся обновлять сразу много доменов. Собственно, вот и вся цель моей небольшой заметки: это не пошаговый степ-бай-степ, не длинная теоретическая статья о том, как функционирует Let’s Encrypt — просто описывается правильный на мой взгляд подход, который будет правилен для конфигурации любой сложности.
Вся суть в двух словах: пусть Let’s Encrypt запустит веб-сервер на 9999 порту, а мы допишем конфиг nginx, чтобы он пробросил запрос на этот бекенд. Кому интересны детали — прошу под кат
Установка Let’s Encrypt в настоящее время рекомендуется из репозитория на гитхабе:
git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt
Для некоторых операционок уже есть готовые пакеты (более того — вместо команды letsencrypt-auto (которая по сути есть лишь обёртка для letsencrypt) можно использовать letsencrypt), но установка из репозитория меня, как программиста вполне устраивает.
Далее — нужно подготовить наш сервер.
В принципе, всё, что от нас требуется — это чтобы по адресу mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE отдавался заранее определённый контент с нужными заголовками.
Переложим эту работу на сам Let’s Encrypt: пусть сам подымет на 127.0.0.1:9999 собственный веб-сервер, а мы — лишь допишем в конфиг nginx правило для проброса запросов на этот бекенд. Не нужно ни останавливать ничего, ни тем более создавать файлы вручную.
Итак. Создаём файл /etc/nginx/template/letsencrypt.conf следующего вида:
location ~ ^/(.well-known/acme-challenge/.*)$ {
proxy_pass http://127.0.0.1:9999/$1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
И подключим в конфиг-файлы нужных поддоменов:
include template/letsencrypt.conf;
Собственно, это всё. Дальше можно запустить одну-единственную команду — собственно запустить Let’s encrypt:
letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d mydomain.tld -d www.mydomain.tld -d i1.mydomain.tld -d i2.mydomain.tld
Здесь я получаю сертификат сразу для четырёх поддоменов, указываю, что нужно запустить веб-сервер на порту 9999, согласиться с лицензионным соглашением. (В принципе, можно указать в командной строке е-мейл, чтобы вообще не пришлось в интерактивный режим входить и довносить эту информацию: читайте описание ключей в документации)
В принципе, больше описывать нечего. Как внести сертификат в конфиг-файл nginx достаточно хороших и правильных описаний.
Единственное — осталось добавить в cron команду автоматического продления:
letsencrypt-auto renew >> /dev/null 2>&1
В getting-started приведены другие примеры скриптов обновления, рекомендую посмотреть: можно предусмотреть допустим отправку письма в случае, если обновление закончилось неудачей или автоматически рестартовать демон веб-сервера.
Вот и всё. От себя добавлю, что очень не люблю быть в первых рядах новой технологии («пока не выйдет первый сервис-пак — нет смысла обновлять винду на новую»), но в принципе, вижу, что Let’s Encrypt уже можно потихоньку начинать использовать в продакшн.
PS В качестве основы для своей заметки я взял статью Дмитрия из его блога. Не знаю, есть ли он на хабре, в любом случае от меня — большое спасибо.
Автообновление let’s encrypt ssl сертификата
Сертификаты Let’s Encrypt действительны в течение 90 дней. Чтобы автоматически продлить сертификаты до истечения срока их действия, создайте cronjob, который будет выполняться два раза в день, и автоматически продлевайте любой сертификат за 30 дней до истечения срока его действия.
Используйте crontab команду для создания нового cronjob:
sudo crontab -e
Вставьте следующую строку:
Быстро и просто получаем let’s encrypt ssl сертификат в windows — v0lk est narod
Много лет я пользовался ОС Linux в качестве основной системы (где-то с начала 2000-х), но последнее время я всё больше занимаюсь дизайном и всё меньше чем-то другим. Можно сказать, что нужда выгнала меня из этого уютного и привычного гнёздышка. На Мак я пока решиться не могу, поэтому да, нынче я заново осваиваюсь в Windows и местами это даётся не легко 🙂 То, что делается в Линуксе на раз-два, здесь вызывает непредвиденные трудности и вопросы. При этом каждый раз скакать с системы на систему очень не удобно, хотя обе они спокойно себе соседствуют. Так и здесь, появилась необходимость быстренько сделать бесплатный SSL сертификат Let’s Encrypt для одного сайтика. Не так давно я описывал процесс создания сертификата с помощью утилиты Certbot и установку его на популярные хостинги REG.RU и SpaceWeb. Теперь я расскажу о том, как быстро выпустить сертификат Let’s Encrypt из-под Windows.
Если быть точнее, то этот способ универсален и для него не важно, какой системой вы пользуетесь. Дело в том, что выпускать сертификат мы будем в браузере. Для этого мы воспользуемся сервисом SSL For Free.
На первом экране необходимо указать ваш домен и нажать на кнопку Create Free SSL Certificate.

Далее необходимо выбрать способ загрузки подтверждающих файлов на ваш хостинг. Есть вариант автоматической загрузки по FTP, но я всё же предпочитаю сделать это руками, поэтому выбираем Manual Verification.

Далее необходимо скачать подтверждающие файлы (или файл). В данном случае файла два для домена без и с www.
В корне вашего сайта создаём каталог .well-known, внути него ещё один каталог acme-challenge и кладём в него скачанные файлы (или файл). Проверяем правильность переходом по ссылкам (п. 5). Если всё хорошо, то жмём Download SSL Certificate и получаем архив с файлами, которые используем для установки на свой хостинг.

Проверяем правильность установки SSL-сертификата. Например, с помощью данного сервиса https://www.sslshopper.com/ssl-checker.html.
Вот и всё
Жаждущим подробностей предлагается обратиться к объяснению особенностей использования сертификатов Let’s Encrypt в связке с nginx с разбором каждого шага и детальными пояснениями.
Генерация группы strong dh (diffie-hellman)
Обмен ключами Diffie-Hellman (DH) – это метод безопасного обмена криптографическими ключами по незащищенному каналу связи.
Создайте новый набор 2048-битных параметров DH, введя следующую команду:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Если вы хотите, вы можете изменить длину ключа до 4096 бит, но генерация может занять более 30 минут, в зависимости от энтропии системы.
Запуск let’s encrypt
Перейдите в каталог letsencrypt.
cd /opt/letsencrypt
Затем используйте плагин Standalone:
./letsencrypt-auto certonly –standalone
Примечание: Программное обеспечение Let’s Encrypt требует привилегий суперпользователя. Программа может запросить пароль.
После запуска letsencrypt запросит некоторые данные.
Примечание: Вопросы, задаваемые при первом запуске программы, отличаются от вопросов, задаваемых при дальнейшем её использовании. В руководстве предполагается, что программа запущена впервые.
Укажите адрес электронной почты, который будет использоваться для отправки извещений и восстановления утерянных ключей.
После этого нужно принять условия соглашения подписчика Let’s Encrypt.
Затем программа запросит доменное имя (или имена). Если вы хотите использовать один сертификат для нескольких доменных имен, укажите их в предложенном поле:
Использование 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
Немного рекламы: На платформе https://rotoro.cloud/ вы можете найти курсы с практическими занятиями:
Использование плагина webroot
Плагин Webroot помещает специальный файл в каталог ./well-known в главном каталоге веб-сервера. После этого Let’s Encrypt может открыть этот файл, чтобы подтвердить домен. В зависимости от настроек сервера вам может понадобиться явно разрешить доступ к каталогу ./well-known.
Чтобы центр сертификации Let’s Encrypt смог получить доступ к каталогу, нужно изменить настройки Nginx.
sudo nano /etc/nginx/sites-enabled/default
В блок server для ssl добавьте следующий код:
location ~ /.well-known {allow all;}
Также можно уточнить путь к root-каталогу в директиве root. Этот путь необходим плагину Webroot; по умолчанию это каталог /usr/share/nginx/html.
Сохраните и закройте файл.
Теперь можно использовать плагин Webroot для обновления сертификата. Указать доменные имена можно при помощи опции –d.
Кеш tls сессий
Если у вас сколько-нибудь современная версия nginx (1.5.9 и старше), то вам нет смысла включать кеш сессии. В более новых версиях по умолчанию включены TLS session tickets, которые делают всё то же, что кеш сессий, но более эффективно без привлечения разделяемой памяти.
Кеширование сессий призвано сократить время на установку новых соединений. Кеш сессий будет иметь смысл если параметры каждой сессии хранить заведомо дольше времени жизни соединения (обычно от одной до пяти минут).
По умолчанию кеш сессий не используется. Это оправдано если у вас современная версия nginx или если у вас нагруженный сервер: после какой-то частоты новых подключений кеш перестаёт справляться со своей задачей, либо вы оказываетесь вынуждены увеличить размеры кеша до неоправданных величин, опять же сводящих на нет ожидаемую пользу от кеша затратами на поиск записей в нём. Если вы можете, не включайте кеш TLS сессий.
Конфигурационный файл let’s encrypt
Чтобы упростить процесс обновления Let’s Encrypt, создайте конфигурационный файл:
sudo cp /opt/letsencrypt/examples/cli.ini /usr/local/etc/le-renew-webroot.ini
Откройте файл для редактирования:
sudo nano /usr/local/etc/le-renew-webroot.ini
Раскомментируйте строки email, domains и webroot-path, а затем укажите в них свои данные.
Файл должен выглядеть так (закомментированные строки опущены):
Настройка
Открываем конфигурационный файл
ssl.conf
# vim /etc/nginx/bx/conf/ssl.conf
Если у вас уже были установлены сертификаты, удаляем или комментируем строки с ними и вставляем новые:
Настройка ssl в nginx
Итак, если процедура с созданием сертификатов в manual режиме прошла успешно, то в вышеупомянутой директории мы найдем все необходимые файлы для настройки безопасного соединения.
- privkey.pem – наш приватный ключ
- cert.pem – сертификат сервера
- chain.pem – корневой (root) и промежуточный (intermediate)
- fullchain.pem – все необходимые нам сертификаты для настройки веб-сервера.
Как же в данном случае будет выглядеть настройка Nginx?
О недостатках let’s encrypt
В конце этой статьи хотим отметить, что несмотря на все преимущества данного типа сертификата, существуют недостатки, которые нужно учитывать при выборе SSL:
- Бесплатный сертификат Let’s Encrypt кратковременный и рассчитан на срок не более 90 дней, в отличии от платного, который можно выпустить сроком до 3 лет. Вы можете , конечно, перевыпускать сертификат каждые 3 месяца, но обязательно следите за сроками. Перевыпуск сертификата можно осуществить тремя способами: вручную, за счет настройки планировщика задач cron или автоматически.
Если вы выбрали способ обновления вручную, то следите четко за сроками и вовремя перевыпускайте сертификат. Иначе рискуете получить наплыв недовольных пользователей сайта и их последующий отток.
Планировщик задач cron – это способ настройки автоматического обновления. Способ хорош для тех, кто владеет навыками администрирования Linux и умеет работать с кронами. Нужно еще учитывать, что в работе крона не исключены ошибки, которые могут помешать перевыпуску сертификата. Вывод: следить за обновлением все равно придется.
Автоматическое обновление. Этот способ подразумевает, что вы принимаете автоматические настройки, предусмотренные Центром сертификации. И тут нужно понимать, что вы таким образом, даете свое согласие на то, что ЦС может вносить изменения по своему усмотрению в ПО и настройки вашего сервера.
- Не все домены можно защитить бесплатным Let’s Encrypt. Данный сертификат рассчитан только на защиту одного домена без проверки компании, так называемые DV SSL (Domain Validation).
Так, при помощи Let’s Encrypt нельзя создать следующие типы сертификатов:
– WildCard сертификат для защиты поддоменов определённого домена;
– Сертификаты OV SSL(organization validation), предполагающие проверку не только домена, но и компании;
– Сертификаты EV SSL (extended validation). Сертификат с максимальной степенью защиты и зелёной адресной строкой браузера;
– Multi-Domain сертификат типа UCC; - Важный момент — нет никаких финансовых гарантий использования Let’sEncrypt . Если вдруг произойдет взлом бесплатного сертификата, то денежную компенсацию никто вам не предоставит.
Обновление уже созданного сертификата
Выполните следующую последовательность команд для обновления и переноса файлов сертификата в каталог TrueConf Server:
- Остановите службу веб-сервера:
- Обновите сертификат:
- Выберите
Spin up a temporary webserver (standalone)(введите1). - Выберите
Renew & replace the cert (limit ~5 per 7 days)(введите2). - Выполните шаги 5 и 6 раздела по получению сертификата.
- Запустите службу веб-сервера:
Подготовка
Чтобы успешно сгенерировать и использовать сертификат Let’s Encrypt вам необходимо проделать следующие подготовительные действия:
- Установить TrueConf Server для Linux.
- Зарегистрировать доменное имя с публичным (белым) IP-адресом.
- Открыть порт 80 на сервере, где будет происходить получение сертификата.
В качестве примера использовался сервер с развёрнутой ОС Debian 10. При активации ключа регистрации в панели управления сервера TrueConf в качестве имени сервера было использовано ранее зарегистрированное доменное имя.
Поддержка старых клиентов
Если вам критически важна поддержка старых клиентов без SNI (напр. IE в WinXP, устаревшие версии Java и Python), то стоит зафиксировать список доменов для сертификата в конфиге.
В этом случае получение сертификатов происходит без явного указания доменов.
С этим подходом любой сможет получить список находящихся у вас на сервере сайтов из данных сертификата, не говоря уж о необходимости править конфиги каждый раз.
Потому лучше без него.
Получаем сертификаты
Ввиду лимитов на обращения сначала попробуем получить сертификат для основного домена в режиме «сухого прогона»:
Этот вызов должен завершиться без сообщений об ошибках.
Если так, то получим сертификат уже в самом деле.
Проверка порта 80
Плагин Standalone позволяет быстро получить сертификат SSL. Он временно запускает отдельный веб-сервер на порт 80, к которому подключается Let’s Encrypt CA и подтверждает сертификат. Следовательно, для работы плагина необходим порт 80, потому нужно временно отключить обычный веб-сервер, если он занимает этот порт.
К примеру, при использовании Nginx нужно ввести:
sudo service nginx stop
Чтобы узнать, занят ли порт 80, введите:
netstat -na | grep ‘:80.*LISTEN’
Если команда не вернула никакого результата, значит, порт свободен, и можно запускать плагин Standalone.
Программная реализация
Центр Сертификации выдаёт сертификаты, которые генерируются на АСМЕ сервере по протоколу Boulder, написанные на языке GO (доступный в исходниках под лицензией MPL2).
Данный сервер предоставляет RESTful-протокол, который функционирует через канал с TLS шифрованием.
Продление ssl сертификата
Ранее я уже упоминал о том, что бесплатные SSL сертификаты “живут” только 90 дней, поэтому после их истечения необходимо будет запускать процедуру продления, благо это тоже бесплатно 🙂
Что же из себя представляет процесс продления?
Как утверждают в Let’s Encrypt, перед истечением, на почту, указанную при создании, приходит соответствующее письмо-уведомление о том, что пора бы продлить сертификат. Чтобы это сделать вручную достаточно запустить команду:
$ ./letsencrypt-autoИ следовать инструкциям на экране. Автоматическое же продление можно настроить используя конфигурационный файл и обычный crontab. Желательно настроить крон таким образом, чтобы продление происходило не чаще 1 раза в месяц.
Если вы работаете из под Windows, то letsencrypt можно развернуть, используя Vagrant или Docker. Правда в этом случае для правильной настройки веб-сервера необходимо будет вручную переместить все файлы на сервер.
Продление сертификатов
После того, как все сертификаты получены и настроены сайты и службы их использующие встает вопрос об их продлении. Мы помним, что срок действия сертификата – 90 дней, поэтому если их много и получены они в разное время, то вручную следить за всем этим хозяйством будет весьма и весьма проблематично.
Устанавливаем ssl сертификат let’s encrypt (инструкция)
Рассмотрим использование сертификата применительно к серверам , используемым на нашем хостинге.
Подавляющее большинство наших серверов используют версию Plesk 12.5 где данный модуль уже включён в дистрибутив Plesk 12.5 и установка его проста и удобна. Достаточно зайти в панель плеск в раздел «Сайты и домены », кликнуть на модуль Let’s Encrypt,
выбрать нужные опции и после нажатия кнопки «Установить», установка произойдёт менее чем за минуту.
Так как данный сертификат рассчитан на срок не более 90 дней, то в панели плеск создана соответствующая задача cron в разделе Инструменты и настройки – Планировщик задач
Стоит заметить, что существуют некоторые ограничения на генерацию сертификата:
- дублирующие сертификаты — не более 5 в неделю;
- количество попыток генерации сертификата не более 5 раз в час.
Установка
Первое, что необходимо сделать — установить
git
# yum install git
Далее переходим в директорию
/tmp
# cd /tmp
С помощью git скачиваем файлы Let’s Encrypt. Сам скрипт теперь называется
Установка git и bc
Чтобы клонировать необходимый репозиторий, сначала нужно установить Git и bc.
Для этого можно использовать пакетный менеджер системы; предварительно нужно обновить список пакетов:
sudo apt-get update
Следующая команда установит git и bc:
sudo apt-get -y install git bc
Установка ssl сертификата для apache
Мой блог работает на связке LAMP, т.е. Linux, Apache, MySQL и PHP. Разработчики Let’s Encrypt постарались на славу и упростили настройку сертификата для Apache до уровня “проще некуда”. Весь процесс сводится к следующим шагам:
Установка сертификатов в nginx
Для nginx нужны три директивы с путями до сертификатов.
Скрипт для выделения директив для настройки TLS/SSL во включаемые файлы.
Можно свериться со списком доменов во включаемых файлах.
Полный рабочий пример конфига.
Конфиг для переадресации с голого домена без www:
Шаг 1 – активируем ssh доступ
- SSH доступ необходим для генерации SSL сертификата. На примере хостинга от компании Hostinger, в панели управления перейдите в раздел SSH

- Включение SSH: нажмите на кнопку Disabled что бы поменять статус на Enabled. Затем нажмите на кнопку Update, что бы сохранить изменения.

- Страница обновится, и вы увидите информацию, необходимую для подключения через SSH (там же ссылка на SSH клиент Putty).
Запишите ее, поскольку она понадобится вам в следующем шаге.
Шаг 2 – установка клиента acme и composer
Для создания SSL-сертификата Let’s Encrypt, мы будем использовать ACME-клиент (Automated Certificate Management Environment) и написанный на PHP композер.
Прежде всего, вам нужно будет подключиться к вашей учетной записи хостинга через SSH и загрузить все необходимые компоненты. Если вы используете macOS или Linux, вы можете использовать терминал для подключения через SSH, пользователи Windows могут воспользоваться клиентом PuttySSH.
Шаг 2: создание сертификата
Откройте командную строку (cmd) от имени администратора и поочерёдно введите следующие команды:
- Выполните
C:wacswacs.exe. - Далее выберите:
- Укажите ваше доменное имя и два раза нажмите Enter для подтверждения.
- Затем последовательно выберите:
- Укажите папку для сохранения сертификатов
C:wacscrt. - После этого выберите:
- Укажите адрес электронной почты для уведомлений об ошибках.
- На дополнительные вопросы отвечайте следующим образом:
Шаг 3 – генерация ssl сертификата
После того, как вы загрузили и установили ACME-клиент и композер, вы можете создать бесплатный SSL от Let’s Encrypt.
Во-первых, зарегистрируйте учетную запись, выполнив следующую команду:
Шаг 4 – установка сертификата через панель управления
На этом этапе у вас уже должен быть сертификат и закрытый ключ, сохраненные на вашем компьютере. Последним шагом является установка SSL-сертификата в вашей учетной записи хостинга. Это можно сделать через раздел SSL:
- Перейдите в раздел SSL.

- Выберите домен из раскрывающегося списка, для которого вы хотите установить сертификат SSL.
- Вставьте содержимое файла certificate.txt в сертификат: (CRT) и содержимое файла privatekey.txt в поле закрытый ключ: (KEY). После завершения нажмите кнопку «Установить».

- После завершении установки вы увидите сообщение, что все успешно установилось.

Заключение
Подводя итоги, можно сказать, что Центр Сертификации Let’s Encrypt достаточно успешный проект, популярность которого растет с каждым годом среди пользователей сети.
И если вам нужен простой сертификат для одного домена, вы обладаете соответствующими навыками администрирования, а также если нет необходимости в SSL с проверкой компании (OV- organization validation) или наличие зеленой адресной строки и указания названия компании в сертификате, то данный сертификат можно использовать.
Тем не менее, мы рекомендуем крупным компаниям, интернет-магазинам, банкам и другим e-commerce проектам устанавливать коммерческие SSL – сертификаты от известных Центров сертификации, таких как, например, GlobalSign, Comodo.Так вы заручитесь доверием пользователей и покажете, что вы серьезная компания, которая заботится о безопасности данных клиентов.
