Generate valid SSL certificates using Certbot cli and renewals
Lets get started…
Let’s Encrypt offers multiple methods for domain validation. In this example, we will be using a DNS Challenge. This involves modifying your DNS Zone to include a TXT record with a random string generated by Certbot, ensuring the request is for a domain you own.
Sometimes people want to get a certificate for the hostname “localhost”, either
for use in local development, or for distribution with a native application that
needs to communicate with a web application. Let’s Encrypt can’t provide
certificates for “localhost” because nobody uniquely owns it, and it’s not
rooted in a top level domain like “.com” or “.net”. It’s possible to
set up your own domain name that happens to resolve to 127.0.0.1
, and get a
certificate for it using the DNS challenge. However, this is generally a bad
idea and there are better options.
To enable HTTPS on your website, you need to get a certificate (a type of file)
from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a
certificate for your website’s domain from Let’s Encrypt, you have to demonstrate
control over the domain. With Let’s Encrypt, you do this using software that uses
the ACME protocol which typically runs
on your web host.
To figure out what method will work best for you, you will need to know whether
you have shell access (also known
as SSH access) to your web host. If you manage your website entirely through a
control panel like cPanel, Plesk, or
WordPress, there’s a good chance you don’t have shell
access. You can ask your hosting provider to be sure.
Чтобы включить протокол HTTPS на вашем сайте, вам необходимо получить сертификат (особый файл) из Центра сертификации (ЦС). Let’s Encrypt — это как раз ЦС. Перед получением сертификата для домена вашего сайта от Let’s Encrypt, вам нужно подтвердить право на владение доменом. Let’s Encrypt делает это с помощью специального ПО, использующего протокол ACME, который обычно работает на вашем веб-сервере.
Чтобы понять, какой способ получения сертификата подойдёт вам лучше, выясните, есть ли у вас доступ к оболочке (также известный как SSH-доступ) к вашему веб-серверу. Если вы администрируете сайты с помощью панели управления типа cPanel, Plesk или WordPress, то скорее всего такого доступа у вас нет. Если сомневаетесь — уточните у своего хостинг-провайдера.
В данной статье мы посмотрим, как можно установить бесплатный сертификат Let’s Encrypt на web-сайт, работающий на Internet Information Servises (IIS). Наш справочник уже содержит мануалы по установке такого сертификата на Ubuntu и на CentOs, поэтому отложим теорию и приступим.
В качестве примера для установки сертификата мы будем использовать VPS, работающий на Windows Server 2019. На нашем сервере мы развернули web-сервер из набора серверов IIS, на котором запустили сайт my-domain.host
. Доступ к сайту осуществляется по протоколу http
.

Задача – получить сертификат из Центра Сертификации Let’s Encrypt, установить его на наш web-сервер и привязать к нашему домену. Также, мы перенаправим трафик HTTP на протокол HTTPS. Другими словами, при попытке подключится к сайту по протоколу HTTP, система будет включать протокол HTTPS.
Intro
Recently, I started switching all my certificates that are soon expiring to Amazon issued ones which are automatically stored in AWS ACM. Limitation of that approach is that you can’t export such certificates. For that reason, I started using Let’s encrypt which allows me to use and store SSL certificates locally.
- AWS
- Certbot
To install them on your Macbook, you can simply use brew
:
brew install awscli
brew install certbot
$ sudo certbot --version
certbot 1.4.0$ aws --version
aws-cli/2.0.10 Python/3.8.3 Darwin/19.5.0 botocore/2.0.0dev14
In this story, I am aiming to cover the generation of a wildcard SSL certificate for domain.com
using Certbot. Also, I will provide information how to import such certificate into AWS ACM.
The wildcard certificate is marked as demonstrated in the image and covers all possible subdomain under domain.com
.
In this guide I will show you how to generate an SSL certificate using only Windows 10. Note — this guide does not cover renewals or automation, yet.
Fortunately, Windows 10 Anniversary Update (1607) brings a new feature, aptly titled Bash on Ubuntu on Windows. This feature gives Windows a Bash terminal and Linux environment which you can run most Linux command-line tools, without the need for a Linux virtual machine!
Let’s Encrypt recommends the tool Certbot by EFF to generate, install and automate renewals. In the steps below, I show you how to generate the certificate files using this tool, for use in a web server of your choice.
Сегодня уже очень сложной обойтись без сертификатов. Какие-то сервисы или веб-сайты еще могут работать как без сертификатов, так и с ним. Однако, есть сервисы, которые уже не могут работать без сертификатов. Если для “боевого” сервиса часто покупается коммерческий сертификат как минимум на год, то для демонстрационных или тестовых стендов отдельный коммерческий сертификат покупается редко. Выпуск бесплатного сертификата Let’s Encrypt может быть очень к месту в таких ситуациях.
Let’s Encrypt – это центр сертификации, который занимается выдачей бесплатных сертификатов. Срок действия сертификата – 3 месяца. Поддерживается выпуск как широкоименных (wildcard), так и именных сертификатов, в т.ч. с несколькими именами (через атрибут SAN).
Выпуск бесплатного сертификата Let’s Encrypt возможен через любой клиент, который поддерживает ACME протокол. Существует большое количество таких клиентов практически под любую платформу и ситуацию. При определенной настройке можно автоматизировать процесс выпуска сертификата, т.е. вам не придётся продлять его каждый раз руками.
Мы рассмотрим выпуск бесплатного сертификата Let’s Encrypt через win-acme клиент. Лично мне довольно часто приходится использовать этот клиент для выпуска сертификатов на тестовые или отладочные стенды Exchange, Skype for Business, AD FS и ряд других сервисов.
Кстати, сертификат для веб-сервера этого блога также от Let’s Encrypt 🙂
Выпуск сертификата через win-acme клиент
Как мы говорили выше мы будем использовать win-acme клиент для выпуска сертификата. Сертификат мы будем выпускать в PFX-формате, чтобы его было удобнее импортировать в хранилище сертификатов Windows. Этот клиент также поддерживает выпуск сертификатов в формате с раздельными файлами для закрытого ключа и сертификата.
Мы будем выпускать wildcard сертификат для следующего имени – *.itproblog.ru
Для выпуска бесплатного сертификата Let’s Encrypt через win-acme клиент необходимо выполнить следующие шаги:
1. Загрузить клиент с сайта разработчика.

2. Распаковать загруженный архив:

3. Запустить cmd.exe от имени администратора, перейти в распакованную в п. 2 директорию и выполнить команду:
wacs.exe
Появится приветствие win-acme клиента:

4. Укажем, что мы хотим выпустить сертификат и при этом не использовать настройки по умолчанию, а указать те настройки, которые необходимы нам:

5. Укажем, что мы вручную перечислим необходимые нам имена:

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

7. Клиент попросит указать дружественное имя сертификата, т.е. имя, которое будет отображаться при импорте в хранилище сертификатов Windows. Можем указать свое имя, либо оставить имя по умолчанию.
8. Теперь нам необходимо подтвердить право владения доменом. Это можно сделать несколькими способами. Мы укажем, что вручную создадим необходимые DNS записи:

9. Мы будем использовать RSA ключи:

10. Нам будет нужен сертификат в PFX формате – укажем это:

11. Укажем директорию для генерируемого PFX файла и пароль к нему:

12. Мы не планируем куда-то еще записывать наш сертификат:

13. Необходимые изменения в конфигурацию наших приложений мы внесем самостоятельно вручную. Укажем это:

14. Теперь нам необходимо создать запись в нашей DNS зоне для того, чтобы подтвердить право владения доменом. Параметры DNS записи нам генерирует win-acme клиент:

15. Процедура регистрация TXT записи для каждого хостера вашей зоны своя. В нашем случае уже добавленная запись выглядит следующим образом:

16. Теперь вернемся в наш win-acme клиент и нажмем Enter. После удачной проверки записи клиент попросит нас удалить её:

17. После этого win-acme клиент сгенерируют сертификат в форме PFX, о чем напишет нам в консоль:

18. Клиент теперь можно закрыть, а в директории, которую мы указывали для генерации сертификата мы должны увидеть итоговый PDF-файл:

Выпуск бесплатного сертификата Let’s Encrypt через win-acme клиент выполнен.
В данной публикации было кратко рассказано об одном из методов, который можно использовать для выпуска бесплатного сертификата. Мы рассмотрели процесс выпуска бесплатного сертификата Let’s Encrypt через win-acme клиент.
Сегодня защищенное соединение перестало быть уделом сайтов, работающих с пользовательскими данными, а стало насущной необходимостью для всех, даже если у вас простой блог о личном увлечении. Большинство современных браузеров при заходе на простой HTTP-сайт уже указывают в адресной строке, что подключение не защищено, но в скором будущем начнут помечать такие сайты как небезопасные. Тем более что с приходом Let’s Encrypt шифрование стало доступно каждому и настроить его несложно, о чем мы и расскажем в данной статье.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Начнем мы с наиболее популярного веб-сервера Apache, первоначальная настройка которого выполнена по нашей статье: Настраиваем веб-сервер на базе Apache в Debian / Ubuntu Server. В данной статье будет использоваться Apache 2.4 установленный в среде Debian 10, но все сказанное ниже будет справедливо для любого основанного на Debian или Ubuntu дистрибутива, а с некоторыми поправками — для любой Linux системы.
Будем считать, что у нас уже настроен как минимум один виртуальный хост, на котором работает сайт, допустим, example.com, минимальная конфигурация виртуального хоста должна выглядеть примерно так:
<VirtualHost *:80>
ServerName example.com
ServerAdmin mail@example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
ErrorLog ${APACHE_LOG_DIR}/example.com.error.log <Directory /var/www/example.com>
Options -Includes -Indexes -ExecCGI
AllowOverride All
</Directory>
</VirtualHost>
Мы не будем подробно описывать значение опций, это сделано в указанной нами статье, а конфигурация приведена для примера, на который мы будем опираться в дальнейшем по ходу статьи.
Прежде всего нам потребуется настроить веб-сервер для работы с Let’s Encrypt, сделав так, чтобы сертификаты можно было легко получать для любого обслуживаемого сервером сайта без дополнительных настроек. Создадим для этого специальную директорию:
mkdir /var/www/letsencrypt
И сделаем ее владельцем веб сервер:
chown -R www-data:www-data /var/www/letsencrypt
Затем создадим файл конфигурации для Аpache:
touch /etc/apache2/conf-available/le.conf
и внесем в него следующий текст:
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
<Directory "/var/www/letsencrypt/.well-known/acme-challenge/">
Options None
AllowOverride None
ForceType text/plain
Require all granted
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
</Directory>
Эта настройка будет перенаправлять все запросы к /.well-known/acme-challenge любого сайта в созданную нами директорию /var/www/letsencrypt.
Подключим конфигурационный файл:
a2enconf le
и проверим конфигурацию на ошибки:
apachectl -t
Затем перезапустим веб-сервер
service apache2 restart
Следующим шагом установим certbot, в современных дистрибутивах он включен в репозитории, поэтому достаточно выполнить:
apt install certbot
Если вы используете более старые дистрибутивы, то обратитесь к нашей статье: Получаем сертификаты Let’s Encrypt при помощи Certbot
Пакет не требует начальной настройки и готов к работе сразу после установки. Перед тем, как получать сертификат, убедитесь, что к вашему серверу есть доступ из интернета. В любом случае советуем сначала выполнить пробное получение:
certbot certonly --dry-run --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
За тестовый режим отвечает ключ —dry-run, ключ —webroot указывает используемый плагин, в нашем случае отвечающий за работу с уже имеющемся веб-сервером. Опция -w указывает корневую директорию для Let’s Encrypt, которую мы создали и настроили ранее, а через ключи -d перечисляются домены и поддомены, для которых требуется получить сертификат. Если все прошло успешно вы получите лаконичное сообщение:
После того, как тест прошел успешно можно выполнить настоящее получение сертификатов, для этого просто уберите ключ —dry-run из команды.
certbot certonly --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
Теперь вы получите более информативное сообщение, содержащее информацию о расположении полученных сертификатов и сроков их действия:
[renewalparams]
...
renew_hook = service apache2 reload
Порядок расположения опций значения не имеет. Параметр renew_hook позволяет указать действие, которое следует выполнить при успешном продлении сертификата, в нашем случае это перезапуск веб-сервера Apache.
Сертификат получен, можно переходить к настройке виртуального хоста для работы сайта по защищенному протоколу, рекомендуем скопировать текущий файл конфигурации и вносить настройки в него:
cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/example.com-ssl.conf
Затем откроем его и сразу изменим порт с 80 на 443:
<VirtualHost *:443>
Также советуем изменить имена файлов логов:
CustomLog ${APACHE_LOG_DIR}/example.com-ssl.access.log combined
ErrorLog ${APACHE_LOG_DIR}/example.com-ssl.error.log
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/example.com/chain.pem
Эти опции включают SSL и указывают пути к сертификатам. В теории этого достаточно, но в современных условиях такие настройки не будут надежными, так как разрешают использование устаревших протоколов и нестойких шифров. Для получения современной и актуальной конфигурации SSL мы советуем воспользоваться сервисом moz://a SSL Configuration Generator, который предлагает несколько вариантов настроек, оптимальным является использование опции Intermediate.
Но не следует добавлять сразу все опции, ряд из них могут иметь достаточно «неожиданное» действие на неподготовленного пользователя. Поэтому сначала разберемся с шифрами и протоколами:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
Первая опция отключает устаревшие и небезопасные протоколы SSLv3, TLS 1.0 и TLS 1.1, вторая задает доступные к использованию шифры. Создание набора шифров — это наиболее сложная задача, поэтому лучше довериться специалистам Mozilla, нежели изобретать велосипед самостоятельно.
SSLHonorCipherOrder off
SSLSessionTickets off
Первая строка определяет приоритет при выборе шифра, включенная опция отдает приоритет серверу, выключенная — браузеру клиента. В целях совместимости следует отдавать приоритет выбору клиента, а выбор сервера использовать только тогда, когда требуется принудительно использовать максимально стойкое шифрование. Вторая отключает использование сессионных билетов SSL, что требуется для обеспечения режима совершенной прямой секретности.
Также разрешим использование протокола HTTP/2, если это возможно:
Protocols h2 http/1.1
Сохраним файл конфигурации и подключим его:
a2ensite example.com-ssl
Также нам потребуется модуль SSL:
a2enmod ssl
Проверим конфигурацию и перезапустим веб-сервер:
apachectl -t
service apache2 restart
После чего откройте сайт, явно указав протокол https://example.com
На этом этапе вы можете столкнуться с проблемой смешанного содержимого, когда определенные ресурсы сайта, например, изображения или скрипты загружаются по незащищенному протоколу HTTP. Если к первым браузеры относятся относительно лояльно, просто убирая «замочек» в адресной строке, то вторые по умолчанию блокируются. Поэтому внимательно изучите код вашего сайта и замените везде, где это возможно, получение ресурсов на защищенный протокол HTTPS. Если это невозможно, то от таких ресурсов следует отказаться.
Добившись идеальной работы сайта по HTTPS, двинемся дальше, сначала включим технологию HSTS, которая принудительно активирует защищенное соединение, если сайт хоть один раз был успешно через него загружен. При использовании данного механизма браузер будет принудительно переключаться на HTTPS даже если в строке подключения пользователь явно укажет протокол HTTP, это позволяет успешно бороться с атаками на понижение степени защиты.
Для этого добавим в конфигурацию виртуального хоста строку:
Header always set Strict-Transport-Security "max-age=63072000"
Также включим механизм OCSP Stapling, который позволяет ускорить проверку сертификата клиентом, что особенно важно для мобильных пользователей. Добавим строку:
SSLUseStapling On
Однако этого недостаточно, сохраним настройки виртуального хоста и снова откроем файл /etc/apache2/conf-available/le.conf, куда добавим:
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
Для работы вышеперечисленных опций нам потребуется модуль Headers:
a2enmod headers
Снова проверяем конфигурацию и перезапускаем сервер:
apachectl -t
service apache2 restart
Самое время проверить HSTS в действии: перейдите на сайт по защищенному протоколу, а затем попробуйте открыть его HTTP версию, если HSTS работает, то у вас это не получится.
И в завершение настроим перенаправление клиентов с HTTP версии сайта на HTTPS, для этого откроем настройки виртуального хоста HTTP версии /etc/apache2/sites-available/example.com.conf и удалим из него все строки кроме:
<VirtualHost *:80>
ServerName example.com
ServerAdmin mail@example.com
ServerAlias www.example.com
А затем добавим:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Сохраним файл конфигурации и подключим модуль Rewrite:
a2enmod rewrite
И еще раз перезапустим сервер, не забыв проверить конфигурацию:
apachectl -t
service apache2 restart
Теперь наш сервер настроен с учетом всех современных методик, проверить это можно на сайте SSL Labs, с текущими настройками была получена высшая оценка A+:
Как видим, настроить веб-сервер Apache для работы по HTTPS совсем несложно. А Let’s Encrypt обеспечит бесплатное получение и обновление сертификатов в автоматическом режиме. Если вы заметили, то мы ничего не писали про настройку автообновления, Certbot все уже сделал за нас.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Каждый месяц у нескольких моих клиентов заканчиваются SSL сертификаты. В основном SSL сертификаты используются на WEB сайтах и почтовых серверах Microsoft Exchange, Замена SSL сертификатов для сотрудников технической поддержки стала уже рутинной задачей, которую они выполняют по инструкции. Моя компания работает с несколькими партнерами: Firstssl и Leaderssl. Наши партнеры обеспечивают надежный сервис и быструю реакцию в случаях технических и организационных затруднений. Тем не менее с 28 февраля 2022 года SSL сертификаты, связанные каким-либо образом с Российской Федерацией или Белорусией проверяются вручную. Ручная проверка обозначает то, что выпуск сертификата может быть более 14 дней. На нашей практике один из сертификатов выпускается уже больше 50 дней. Почтовый сервер Microsoft Exchange более требователен к сертификатам, чем WEB сайты. По этому устанавливая сторонний или само подписанный сертификат, мы получаем проблемы в администрировании и трудности в работе пользователей. Но выход из сложившейся ситуации есть – Let’s Encrypt для Microsoft Exchange Server
Основные условия ручной проверки:
– Домен в зонах ru, рф, by
– Страна Россия или Белорусия в файле запроса сертификата.
В этой статье я хочу показать, как в течении 15 минут можно выпустить и установить сертификат Let’s Encrypt на Microsoft Exchange 2013-2019.
Что такое Let’s Encrypt.
Let’s Encrypt – это абсолютно бесплатный способ защитить наши сервера SSL- сертификатом. SSL сертификат обеспечивает безопасную зашифрованную передачу данных. Основателем Let’s Encrypt является некоммерческая организация, миссией которой является создание безопасного и конфиденциального Интернета. Сообщество поддерживает данный способ выдачи сертификатов и реализует различные библиотеки.
Сертификат безопасности сайта не является доверенным
При установке нового сервера Exchange SSL сертификат выпускается локальным центром сертификации. Из-за этого сразу возникает две ошибки:
- При авторизации в OWA отображается ошибка «Сертификат безопасности сайта не является доверенным»
- Почтовые клиенты, в том числе на мобильных устройствах не позволяют добавлять учетную запись, пока сертификат не будет установлен вручную.
Безусловно, наличие предупреждений браузера о недействительном сертификате не ограничивает работу. Пользователи могут отправлять и получать почту либо в браузере или с помощью подключенного почтового ящика Outlook в локальной сети.
Установка и настройка клиента Let’s Encrypt Win-ACME.
Для установки SSL сертификата нам потребуется ACME клиент. Основным ACME клиентом считается Certbot. О нем вы наверняка слышали, если когда-либо выпускали сертификат для вашего web сайта. Для выполнение нашей задачи, нам потребуется Windows ACME Simple (WACS).
Перед началом выпуска сертификата измените параметр PrivateKeyExportable в файле settings_default.json, указа значение true. По умолчанию файл находиться в каталоге «C:\Program Files\Lets Encrypt ». Изменив данный параметр, вы сможете автоматически извлечь закрытый ключ.
Установка Let’s Encrypt сертификата на Exchange Server
После загрузки и извлечения файлов вы можете приступить к установке сертификатов Let’s Encrypt. В каталоге C:\Program Files\Lets Encrypt запустите файл wacs.exe с правами администратора. В случае успешного запуска вы увидите командную строку с оболочкой Win-ACME.
Нажмите “М”, что бы создать новый SSL сертификат
A simple Windows ACMEv2 client (WACS)
Software version 2.1.22.1260 (release, pluggable, standalone, 64-bit)
Connecting to https://acme-v02.api.letsencrypt.org/...
Scheduled task not configured yet
Please report issues at https://github.com/win-acme/win-acme
N: Create certificate (default settings)
M: Create certificate (full options)
R: Run renewals (0 currently due)
A: Manage renewals (0 total)
O: More options...
Q: Quit
Please choose from the menu: M
Нажмите цифру 2, для ручного ввода.
Running in mode: Interactive, Advanced
Please specify how the list of domain names that will be included in the
certificate should be determined. If you choose for one of the "all bindings"
options, the list will automatically be updated for future renewals to
reflect the bindings at that time.
1: Read bindings from IIS
2: Manual input
3: CSR created by another program
C: Abort
How shall we determine the domain(s) to include in the certificate?: 2
В появившейся строке введите имя хоста или хостов через запятую. Убедитесь, что имена хостов указаны верно и не содержат внутренние имена. Например: EXCH01-2019. Согласно моему опыту лучше использовать одно и то же пространство имен для внутреннего и внешнего DNS. В пример я буду использовать mail.tucki.ru и autodiscover.tucki.ru.
Description: A host name to get a certificate for. This may be a
comma-separated list.
Host: mail.tucki.ru,autodiscover.tucki.ru
Далее Вам будет предложено ввести более понятные имена. Вам следует пропустить данный шаг, просто нажав Enter.
Source generated using plugin Manual: mail.tucki.ru and 1 alternatives
Friendly name '[Manual] mail.tucki.ru'. <Enter> to accept or type desired name: <Enter>
Далее клиент Let’s Encrypt ACME инициирует подключение к Let’s Encrypt через TCP/80 и TCP/443 порты. Вам следует убедиться, что в Вашем брандмауэре разрешены данные порты. Убедитесь, что вы разрешили все порты, которые Exchange Server использует для работы.
Для проверки домена на следующем шаге нажмите цифру – 2 и нажмите Enter
The ACME server will need to verify that you are the owner of the domain
names that you are requesting the certificate for. This happens both during
initial setup *and* for every future renewal. There are two main methods of
doing so: answering specific http requests (http-01) or create specific dns
records (dns-01). For wildcard domains the latter is the only option. Various
additional plugins are available from https://github.com/win-acme/win-acme/.
1: [http-01] Save verification files on (network) path
2: [http-01] Serve verification files from memory
3: [http-01] Upload verification files via FTP(S)
4: [http-01] Upload verification files via SSH-FTP
5: [http-01] Upload verification files via WebDav
6: [dns-01] Create verification records manually (auto-renew not possible)
7: [dns-01] Create verification records with acme-dns (https://github.com/joohoi/acme-dns)
8: [dns-01] Create verification records with your own script
9: [tls-alpn-01] Answer TLS verification request from win-acme
C: Abort
How would you like prove ownership for the domain(s)?: 2
Снова нажмите цифру 2, что бы выбрать RSA ключ и нажмите Enter.
After ownership of the domain(s) has been proven, we will create a
Certificate Signing Request (CSR) to obtain the actual certificate. The CSR
determines properties of the certificate like which (type of) key to use. If
you are not sure what to pick here, RSA is the safe default.
1: Elliptic Curve key
2: RSA key
C: Abort
What kind of private key should be used for the certificate?: 2
На следующем шаге Вам необходимо выбрать место хранения сертификата. Я использую Windows Certificate Store. Выберите цифру – 4.
When we have the certificate, you can store in one or more ways to make it
accessible to your applications. The Windows Certificate Store is the default
location for IIS (unless you are managing a cluster of them).
1: IIS Central Certificate Store (.pfx per host)
2: PEM encoded files (Apache, nginx, etc.)
3: PFX archive
4: Windows Certificate Store
5: No (additional) store steps
How would you like to store the certificate?: 4
Выберите место, где находится хранилище сертификатов. Нажмите цифру 2.
1: [WebHosting] - Dedicated store for IIS
2: [My] - General computer store (for Exchange/RDS)
3: [Default] - Use global default, currently WebHosting
Choose store to use, or type the name of another unlisted store: 2
На следующем шаге вам будет предложено сохранить сертификат в другом месте. Откажитесь, нажав цифру 5.
1: IIS Central Certificate Store (.pfx per host)
2: PEM encoded files (Apache, nginx, etc.)
3: PFX archive
4: Windows Certificate Store
5: No (additional) store steps
Would you like to store it in another way too?: 5
После выпуска SSL сертификат, Вам необходимо обновить связи и привязки HTTPS в IIS. Выберите цифру 1 и нажмите Enter.
With the certificate saved to the store(s) of your choice, you may choose one
or more steps to update your applications, e.g. to configure the new
thumbprint, or to update bindings.
1: Create or update bindings in IIS
2: Start external script or program
3: No (additional) installation steps
Which installation step should run first?: 1
Нажмите цифру 1, что бы выбрать сайт по умолчанию.
1: Default Web Site
2: Exchange Back End
Choose site to create new bindings: 1
Нажмите 2, что бы выполнить внешний скрипт и нажмите Enter
1: Create or update bindings in IIS
2: Start external script or program
3: No (additional) installation steps
Add another installation step?: 2
Укажите путь для PowerShell скрипта – ./Scripts/ImportExchange.ps1 и нажмите Enter
Description: Path to script file to run after retrieving the
certificate. This may be any executable file or a
Powershell (.ps1) script.
File: ./Scripts/ImportExchange.ps1
Укажите параметры, для привязки скрипта к службам. Нажмите Enter.
{CertCommonName}: Common name (primary domain name)
{CachePassword}: .pfx password
{CacheFile}: .pfx full path
{CertFriendlyName}: Certificate friendly name
{CertThumbprint}: Certificate thumbprint
{StoreType}: Type of store (e.g. CentralSsl, CertificateStore,
PemFiles, ...)
{StorePath}: Path to the store
{RenewalId}: Renewal identifier
{OldCertCommonName}: Common name (primary domain name) of the previously
issued certificate
{OldCertFriendlyName}: Friendly name of the previously issued certificate
{OldCertThumbprint}: Thumbprint of the previously issued certificate
Description: Parameters for the script to run after retrieving the
certificate. Refer to
https://win-acme.com/reference/plugins/installation/script
for further instructions.
Parameters: '{CertThumbprint}' 'IIS,SMTP,IMAP' 1 '{CacheFile}' '{CachePassword}' '{CertFriendlyName}'
Продолжите установку, нажав цифру 3 и Enter
1: Create or update bindings in IIS
2: Start external script or program
3: No (additional) installation steps
Add another installation step?: 3
Нажмите N, что бы не показывать условия использования и лицензионного соглашения.
Terms of service: C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\LE-SA-v1.2-November-15-2017.pdf
Open in default application? (y/n*) n
Согласитесь с условиями соглашения, нажав Y и Enter
Do you agree with the terms? (y*/n) y
Введите ваш адрес электронной почты и нажмите Enter
Enter email(s) for notifications about problems and abuse (comma seperated): info@tucki.ru
Далее в командной строке будет вывод генерации SSL сертификата и его установки
[autodiscover.tucki.ru] Authorizing...
[autodiscover.tucki.ru] Authorizing using http-01 validation (SelfHosting)
[autodiscover.tucki.ru] Authorization result: valid
[mail.tucki.ru] Authorizing...
[mail.tucki.ru] Authorizing using http-01 validation (SelfHosting)
[mail.tucki.ru] Authorization result: valid
Downloading certificate [Manual] mail.tucki.ru
Store with CertificateStore...
Installing certificate in the certificate store
Adding certificate [Manual] mail.tucki.ru @ 2022/5/11 19:56:12 to store My
Installation step 1/2: IIS...
Our best match was the default binding and it seems there are other non-SNI enabled bindings listening to the same endpoint, which means we cannot update it without potentially causing problems. Instead, a new binding will be created. You may manually update the bindings if you want IIS to be configured in a different way.
Our best match was the default binding and it seems there are other non-SNI enabled bindings listening to the same endpoint, which means we cannot update it without potentially causing problems. Instead, a new binding will be created. You may manually update the bindings if you want IIS to be configured in a different way.
Adding new https binding *:443:tucki.ru
Our best match was the default binding and it seems there are other non-SNI enabled bindings listening to the same endpoint, which means we cannot update it without potentially causing problems. Instead, a new binding will be created. You may manually update the bindings if you want IIS to be configured in a different way.
Our best match was the default binding and it seems there are other non-SNI enabled bindings listening to the same endpoint, which means we cannot update it without potentially causing problems. Instead, a new binding will be created. You may manually update the bindings if you want IIS to be configured in a different way.
Adding new https binding *:443:autodiscover.tucki.ru
Committing 2 https binding changes to IIS while updating site 1
Installation step 2/2: Script...
Script ./Scripts/ImportExchange.ps1 starting with parameters 'D8724E991E59BEA4D3EA364AC1E3EFB2668E932F' 'IIS,SMTP,IMAP' 1 'C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates\PTQ-g6p-2E6SpcZkRfpOQA-9abaf6286b9e2fb42d8311899c4c9eb496dd699e-temp.pfx' '********' '[Manual] mail.tucki.ru @ 2022/08/12 20:23:25'
Script finished
Adding Task Scheduler entry with the following settings
- Name win-acme renew (acme-v02.api.letsencrypt.org)
- Path C:\Program Files\Lets Encrypt
- Command wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"
- Start at 09:00:00
- Random delay 04:00:00
- Time limit 02:00:00
Для автоматического продления сертификата от системного пользователя нажмите N и Enter
Do you want to specify the user the task will run as? (y/n*) - no
Adding renewal for [Manual] mail.tucki.ru
Next renewal due at 2022/7/5 19:55:25
Certificate [Manual] mail.tucki.ru created
Поздравляю, Вы установили SSL сертификат на ваш почтовый сервер. Для выхода из Let’s Encrypt Win-ACME нажмите Q и Enter.
После несложных действий SSL сертификат был выпущен и привязан к службам Exchange IIS, SMTP, and IMAP.
Breaking it down
-d — Your domain
-manual — Provides manual instructions for obtaining a certificate
-preferred-challenges — Challenge type. In this example, we will be using the DNS challenge, as explained earlier in the article.
We’re asked “Are you OK with your IP being logged?”
Type Y and Enter to continue
Installing OpenSSL
sudo apt-get install openssl
Now, with the OpenSSL package installed run the command
Important — Ensure your working directory is:/etc/letsencrypt/live/secure.yourdomain.com
openssl pkcs12 -export -out /tmp/certificate.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
Now we have our PFX certificate at /tmp/certificate.pfx, we can move it somewhere accessible by our Windows device. I made a folder at C:\tmp, where I will copy the certificate to, using the command
cp /tmp/certificate.pfx /mnt/c/tmp
Congratulations, you now have a valid SSL certificate acessible and ready to use, all from your Windows device.
With Shell Access
We recommend that most people with shell access use the
Certbot ACME client. It can automate certificate issuance and installation with no downtime.
It also has expert modes for people who don’t want autoconfiguration. It’s easy to use,
works on many operating systems, and has great documentation. Visit the
Certbot site to get customized instructions for your operating system and web server.
If Certbot does not meet your needs, or you’d like to try something else, there are
many more ACME clients to choose from. Once you’ve chosen ACME client
software, see the documentation for that client to proceed.
If you’re experimenting with different ACME clients, use our
staging environment to avoid hitting
rate limits.
Basics
SSL Certificates are small data files that digitally bind a cryptographic key to an organisation’s details. When installed on a web server, it activates the padlock and the https protocol and allows secure connections from a web server to a browser. Commonly, SSL is used to secure credit card transactions, data transfer and logins, and more recently is becoming the norm when securing browsing of social media sites.
Note: As of August 2020 most browsers will no longer display the green padlock and address bar to indicate Extended Validation.
When a certificate is successfully installed on your server, the application protocol (also known as HTTP) will change to HTTPS, where the ‘S’ stands for ‘secure’.
Verify validity of SSL Certificates generated by Certbot
sudo certbot certificates
Note that in my output above, I have three wildcard SSL certificates for three different domains.
Available files for each certificate
privkey.pem
— private key for the certificate.
cert.pem and chain.pem
— cert.pem
contains the server certificate by itself, and chain.pem
contains the additional intermediate certificate or certificates that web browsers will need in order to validate the server certificate. If you provide one of these files to your web server, you must provide both of them, or some browsers will show “This Connection is Untrusted” errors for your site, some of the time.
Получение сертификата
Наиболее простым способом установки SSL-сертификата от Let’s Encrypt является применение консольной утилиты WACS (Windows ACME Simple). WACS позволяет осуществить автоматический выпуск и привязку SSL-сертификата к сайтам, работающим на IIS. На момент написания данной статьи актуальной версией утилиты являлась версия v2.1.22.1289. Загрузка клиента WACS доступна со страницы проекта на GitHub – https://github.com/win-acme/win-acme/releases.

После загрузки архива распакуйте его содержимое в каталог C:\inetpub\letsencrypt\
на вашем виртуальном сервере. Далее, запустите на исполнение файл wacs.exe
. В открывшемся меню нужно выбрать опцию создания сертификата с установками по умолчанию. Для того, чтобы это сделать, введите символ N
.

На следующем шаге утилита предложит выбрать сайт, для которого будет выпускаться сертификат. Поскольку в нашем случае в IIS находится всего один сайт, то мы можем нажать Enter. Если в списке будут находиться несколько сайтов, вы можете выбрать один или несколько из них, перечислив их номера через запятую. После чего нажмите символ A
, чтобы выбрать все привязки, и символ y
, чтобы подтвердить свой выбор.

Далее, утилита предложит открыть для прочтения Пользовательское соглашение, после чего попросит вас подтвердить своё согласие с ним. Необходимо будет ещё раз нажать y
.

После этого нужно будет ввести адрес электронной почты для связи с вами по возможным проблемам с SSL-сертификатом. Далее, утилита запустит процесс выпуска сертификата и привязки его к указанным вами доменам. В заключении нажмите Q
для завершения работы WACS.

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

More above folder structure and naming
For servers that drop root privileges before attempting to read the private key file, you will also need to use chgrp
and chmod 0640
to allow the server to read /etc/letsencrypt/live/$domain/privkey.pem
.
Exporting the certificate
In this example, I will be installing the certificate into an IIS web server, which requires a PFX Certificate. PFX Certificates contain both the public and private key in a single file. We can do this using the OpenSSL package.
The DNS Challenge
Go ahead and create this record in your public DNS zone. Here’s what mine looks like, using my providers CPanel interface.
Important — Before pressing enter, you will need to verify the TXT record is valid and reachable. Due to the nature of DNS this can take anywhere from 5 minutes, to an hour.
Making and trusting your own certificates
Anyone can make their own certificates without help from a CA. The only
difference is that certificates you make yourself won’t be trusted by anyone
else. For local development, that’s fine.
The simplest way to generate a private key and self-signed certificate for
localhost is with this openssl command:
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
You can then configure your local web server with localhost.crt and
localhost.key, and install localhost.crt in your list of locally trusted roots.
If you want a little more realism in your development certificates, you can use
minica to generate your own local root certificate, and issue
end-entity (aka leaf) certificates signed by it. You would then import the root
certificate rather than a self-signed end-entity certificate.
You can also choose to use a domain with dots in it, like www.localhost
, by
adding it to /etc/hosts as an alias to 127.0.0.1
. This subtly changes how
browsers handle cookie storage.
Есть доступ по SSH?
Большинству людей с доступом по SSH мы рекомендуем использовать ACME-клиент Certbot. Он автоматизирует выпуск и установку сертификата без перерыва в работе. В нем также есть экспертные режимы для людей, которые не хотят использовать автоматические настройки. Он прост в использовании, работает на большинстве операционных систем, и отлично документирован. Посетите сайт Certbot для получения инструкций по настройке вашей операционной системы и веб-сервера.
Если Certbot вас не устраивает, или вы хотите попробовать что-то другое, есть много других ACME-клиентов на выбор. После того как вы выбрали программное обеспечение клиента ACME, посмотрите документацию для этого клиента.
Если вы экспериментируете с различными ACME-клиентами, используйте наше тестовое окружение, чтобы избежать ограничений в скорости.
Generating The Wildcard SSL Certificate using certbot cli
At this stage you should have your certbot cli installed.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/domain.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/domain.com/privkey.pem
Your cert will expire on 2020-09-06. 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"
During the execution you will be prompt to create TXT record inside Route53 which you can see demonstrated below:
Once you have that record in place, press enter to continue and you will get a desired output presented above.
Getting Help
If you have questions about selecting an ACME client, or about using a particular client, or anything else related to Let’s Encrypt, please try our helpful community forums.
Find the SSL Certificate
After your certificate is successfully generated. You can find them in the default location:
So certificates for domain.com will be available in /etc/letsencrypt/live/domain.com/
Нужна помощь?
Есть вопросы в выборе ACME-клиента, или об использовании другого клиента, или с чем-то, что связано с Let’s Encrypt? Полезные форумы сообщества к вашим услугам.
Download & Install Certbot
apt-get install certbot
Now, we have installed Certbot, but how do we use it?
Without Shell Access
The best way to use Let’s Encrypt without shell access is by using built-in support
from your hosting provider. If your hosting provider offers Let’s Encrypt
support, they can request a free certificate on your behalf, install it, and
keep it up-to-date automatically. For some hosting providers, this is a
configuration setting you need to turn on. Other providers automatically
request and install certificates for all their customers.
If your hosting provider does not support Let’s Encrypt, you can contact them to
request support. We do our best to make it very easy to add Let’s Encrypt
support, and providers are often happy to hear suggestions from customers!
If your hosting provider doesn’t want to integrate Let’s Encrypt, but does
support uploading custom certificates, you can install Certbot on your own
computer and use it in manual mode.
In manual mode, you upload a specific file to your website to prove your
control. Certbot will then retrieve a certificate that you can upload to your
hosting provider. We don’t recommend this option because it is time-consuming
and you will need to repeat it several times per year as your certificate
expires. For most people it is better to request Let’s Encrypt support from your
hosting provider, or switch providers if they do not plan to implement it.
Installing Certbot
Run the following commands in your Bash terminal.
Note — you may need to prefix each command with sudo.
Add the Certbot repository
Настройка протокола HTTPS

Плюс ко всему, утилита WACS создаёт задание в Планировщике заданий (Task Scheduler), предназначенное для продления срока действия установленного сертификата в автоматическом режиме. Задание будет ежедневно запускать на исполнение следующую команду:
C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"

Поскольку наш сайт теперь доступен по 443-му порту (протокол HTTPS), есть смысл отказаться от использования доступа по протоколу HTTP. Для этого необходимо перенаправить трафик HTTP на наш HTTPS-сайт. Чтобы это сделать, потребуется произвести на сервере установку модуля Microsoft URL Rewrite Module. Данный софт доступен для загрузки по ссылке – https://www.iis.net/downloads/microsoft/url-rewrite.

После установки утилиты в профиле сайта на IIS появится кнопка URL Rewrite
.



Теперь, перейдя в браузере по адресу вашего сайта с использованием протокола HTTP, веб-сервер должен будет перенаправить вас на адрес вашего сайта, но уже с префиксом https://
.
Update package lists to include our new repository
Validate the record
NSLookup.exe -q=TXT _acme-challenge.secure.mydomain.com
Now our record is active, Press Enter
Certbot will verify your DNS entry and upon success, will provide you with a valid 90-day SSL certificate. Now we have our certificate, we can export it to a format suitable for the web server.
Generate the certificate
certbot -d secure.mydomain.com --manual --preferred-challenges dns certonly
For local development
The best option: Generate your own certificate, either self-signed or signed by
a local root, and trust it in your operating system’s trust store. Then use that
certificate in your local web server. See below for details.
For native apps talking to web apps
Fortunately, modern browsers consider http://127.0.0.1:8000/
to be a
“potentially trustworthy”
URL because it refers to a loopback address. Traffic sent to 127.0.0.1
is guaranteed
not to leave your machine, and so is considered automatically secure against
network interception. That means if your web app is HTTPS, and you offer a
native app web service on 127.0.0.1
, the two can happily communicate via XHR.
Unfortunately, localhost doesn’t yet get the same treatment.
Also, WebSockets don’t get this treatment for either name.
By introducing a domain name instead of an IP address, you make it possible for
an attacker to Man in the Middle (MitM) the DNS lookup and inject a response that
points to a different IP address. The attacker can then pretend to be the local
app and send fake responses back to the web app, which may compromise your
account on the web app side, depending on how it is designed.
The successful MitM in this situation is possible because in order to make it
work, you had to ship the private key to your certificate with your native app.
That means that anybody who downloads your native app gets a copy of
the private key, including the attacker. This is considered a compromise of your
private key, and your Certificate Authority (CA) is required to revoke your
certificate if they become aware of it. Many native apps have had their
certificates revoked for shipping their private key.
Unfortunately, this leaves native apps without a lot of good, secure options to
communicate with their corresponding web site. And the situation may get
trickier in the future if browsers further tighten access to localhost from the
web.
Also note that exporting a web service that offers privileged native APIs is
inherently risky, because web sites that you didn’t intend to authorize may
access them. If you go down this route, make sure to read up on Cross-Origin
Resource Sharing, use Access-Control-Allow-Origin, and make sure to use a
memory-safe HTTP parser, because even origins you don’t allow access to can send
preflight requests, which may be able to exploit bugs in your parser.
Uploading certs to AWS ACM
Assuming you have all the files available for your generated SSL certificate, you can make use of AWS CLI to import your certificate to ACM.
aws --region eu-west-1 acm import-certificate \
--certificate "/etc/letsencrypt/live/domain.com/cert.pem" \
--private-key "/etc/letsencrypt/live/domain.com/privkey.pem" \
--certificate-chain "/etc/letsencrypt/live/domain.com/fullchain.pem"
Нет доступа по SSH?
Лучший способ использовать Let’s Encrypt без SSH — использовать встроенную поддержку от вашего хостинг-провайдера. Если ваш хостинг-провайдер предлагает поддержку Let’s Encrypt, он может запросить бесплатный сертификат от вашего имени, установить его и обновлять автоматически. Для некоторых хостинг-провайдеров этот параметр настроек необходимо включить. Другие провайдеры автоматически запрашивают и устанавливают сертификаты для всех своих клиентов.
Проверьте наш список хостинг-провайдеров, чтобы посмотреть, есть ли в нём ваш. Если есть, то следуйте их документации, чтобы настроить сертификат Let’s Encrypt.
Если ваш хостинг-провайдер не поддерживает Let’s Encrypt, вы можете связаться с ним и запросить поддержку. Мы делаем все возможное, чтобы добавить поддержку Let’s Encrypt было очень просто, и провайдеры часто рады услышать предложения от своих клиентов!
Вместо заключения
В заключение всё-таки несколько слов о теории.
SSL-сертификаты делятся на три основных типа:
- сертификаты, выпускаемые через проверку прав на домен – Domain Validated (DV);
- сертификаты, подтверждающие домен и его принадлежность конкретному юридическому лицу – Organization Validation (OV);
- и, наконец, сертификаты с расширенной проверкой – Extended Validation (EV).
Сертификат от Let’s Encrypt, получение которого мы описали в данном руководстве, относится к первой категории.
Также, сертификаты могут быть платными и бесплатными. Рассмотренный в нашей статье SSL-сертификат от Let’s Encrypt является бесплатным. Но является ли это его неоспоримым преимуществом?
С одной стороны, да. Бесплатный сертификат обходится потребителю заведомо дешевле, чем платный. Но, с другой стороны, бесплатные сертификаты всё же имеют некоторые минусы. Во-первых, бесплатные сертификаты имеют сравнительно короткий срок действия. По истечении его сертификату требуется перевыпуск. Происходит это постоянно через определённые промежутки времени. Во-вторых, Удостоверяющие Центры, выпускающие платные SSL-сертификаты, проверяют владельцев доменов. Тем самым они формируют более высокое доверие к сайту со стороны поисковых систем и пользователей. В третьих, преимуществом платных сертификатов является наличие финансовых обязательств Центра Сертификации перед доменом. Другими словами, при утечке с ресурса пользовательских данных пострадавший сайт получит компенсацию. Конечно, при условии, что на сайте использовался платный сертификат.
Conclusion
I have demonstrated how to generate and upload SSL certificates to AWS ACM. Personally, I find Certbot very easy to use. I have not hit any issues so far.
Important note, each Certificate is valid for 90 days so it is recommended to renew them every 60 day as per docs.
Hope this is going to help others and speed up their learning.