В том случае, если вы хотите использовать бесплатные SSL/TLS сертификаты Let’s Encrypt для своего сервера Exchange Server, эта статья для вас.
Бесплатные сертификаты Let’s Encrypt
Компания Let’s Encrypt стала выдавать бесплатные SSL/TLS сертификаты с конца 2015 года, и если ранее в сертификате можно было указывать только одно имя (что практически неприменимо в случае публикации Exchange), то на сегодняшний день появилась поддержка мультидоменных сертификатов (SAN/UCC), а на 2018 анонсирована поддержка Wildcard SSL-сертификатов для прямых подменов.
Как вы помните, особенность сертификатов от Let’s Encrypt является их бесплатность, однако выдаются такие сертификаты всего на 90 дней (этим обеспечивается ограниченный срок действия скомпрометированного сертификата). Однако, со стороны пользователя это означает, что использование SSL сертификатов Let’s Encrypt имеет смысл только тогда, когда вы можете обеспечить автоматизацию их перевыпуска.
В этой статье я покажу ручной процесс получения установки сертификата, а в следующей статье поговорим об автоматизации.
На первый взгляд процесс создания и обновления сертификата несколько сложен. Однако, если понять суть процедуры, ее повторение не составит проблем. В отличие от типичного CA, Let’s Encrypt не предоставляет веб-интерфейс для управления запросами на получение сертификатов. Вместо этого вам нужно установить клиентское ПО, которое связывается с серверами Let’s Encrypt. В этой статье я буду использовать для работы с Let’s Encrypt модуль Windows PowerShell под названием ACMESharp.
Установка модуля ACMESharp Module
Модуль ACMESharp доступен в галерее скриптов PowerShell Gallery. Чтобы загрузить и установить модуль из галереи PowerShell, можно воспользоваться командлетом Install-Module, входящий в PowerShellGet. Модули PowerShellGet включены в Windows Management Framework 5 (установлен по умолчанию Windows 10 и Windows Server 2016).
Если у вас более старая ОС, необходимо скачать и установить WMF 5 или отдельный установщик PowerShellGet (https://docs.microsoft.com/en-us/powershell/gallery/readme).
Итак, если у вас уже установлен PowerShellGet, выполните команду:
Install-Module AcmeSharp
В процессе выполнения команды вам будет предложено установить NuGet. Согласитесь с его установкой, т.к. NuGet обеспечивает функции получения пакетов из PowerShell Gallery.
Также вам будет предложено добавить репозитарий галереи PSGallery в доверенные.
Подключение к Let’s Encrypt
После установки модуля ACMESharp нужно создать локальное хранилище для клиента ACMESharp. Данное хранилище используется клиентом для безопасного хранения запросов и ключей. Для создания хранилища, выполните команду:
Initialize-ACMEVault
Теперь, чтобы создать аккаунт в Let’s Encrypt, выполните команду:
New-ACMERegistration -Contacts mailto:admin@contoso.com -AcceptTos
Валидация DNS
Let’s Encrypt требует подтвердить владение каждым DNS именем, которое вы планируете включить в сертификат. Каждое DNS имя связывается с идентфикатором. Для сертификата SAN, нужно создать 2 или более идентификаторов и указать их при создании сертификата.
Подтвердить владение доменом можно несколькими способами:
- DNS – в DNS зоне нужно создать специальные записи TXT, сгенерированные Let’s Encrypt.
- HTTP – на веб сервер нужно поместить специальный файл от Let’s Encrypt.
- TLS-SNI – на веб сервер нужно поместить SSL/TLS сертификат
Как правило, проще всего воспользоваться DNS валидацией и создать в зоне DNS специальную запись.
Создадим новый идентификатор:
New-ACMEIdentifier -dns autodiscover.domain.com -alias autod-test
Псевдоним нужно использовать каждый раз, когда вы создаете идентификатор. Если вы не создадите псевдоним, вы не сможете сослаться на данный идентификатор в дальнейшем.
Затем вам нужно указать, каким образом будет выполнятся валидация. В зависимости от выбранного типа валидации, вам будет сгенерирован код подтверждения. При выполнении проверки через DNS, будет сгенерировано значения TXT записи, которую нужно будет создать.
Complete-ACMEChallenge autod-test -ChallengeType dns-01 -Handler manual
Параметр dns-01 (регистрозависим!) определяет, что вы должны создать TXT запись в DNS.
После того, как вы создадите в своей DNS зоне указанную запись, необходимо отправить запрос, чтобы сервера Let’s Encrypt проверили и подтвердил ее.
Submit-ACMEChallenge autod-test -ChallengeType dns-01
Проверка выполняется не мгновенно. Чтобы проверить текущий статус выполнения проверки на серверах Let’s Encrypt, выполните команду:
(Update-ACMEIdentifier autod-test -ChallengeType dns-01).challenges
В случае успешного подтверждения владения доменом, значение поле Status изменится на valid.
Создаем сертификат Let’s Encrypt
После того, как вы подтвердите все идентификаторы, которые будут включены в ваш сертификат, вы можете сгенерировать запрос на его выпуск. При создании сертификата указываются все идентификаторы, которые нужно в него включить и его псевдоним.
Чтобы сгенерировать запрос на выпуск сертификата, выполните:
New-ACMECertificate mail-test -generate -AlternativeIdentifierRefs autod-test,test -Alias exch
Чтобы передать запрос на выпуск сертификата на сервера Let’s Encrypt, выполните:
Submit-ACMECertificate exch
После отправки запроса, убедитесь, что поле IssuerSerialNumber пустое. С помощью него вы можете определить, что результаты выполнения вашего запроса не получен. Прежде, чем экспортировать сертификат, нужно обновить данные в локальном хранилище:
Update-ACMECertificate exch
Чтобы экспортировать готовый сертификат в pfx файл, содержащий сам сертификат и закрытый ключ, выполните
Get-ACMECertificate exch -ExportPkcs12 exch.pfx -CertificatePassword “password”
В том случае, если при выполнении команды Get-ACMECertificate для экспорта сертификата в pfx файл появляется ошибка: Issuer certificate hasn’t been resolved, убедитесь, что вы предварительно выполнили команду Update-ACMECertificate.
Кроме того, убедитесь что в цепочке промежуточных сертификатов на вашем компьютере есть сертификат Let’s Encrypt Authority X3.
В случае необходимости его можно получить тут https://letsencrypt.org/certificates/
После того, как у вас появился pfx файл, вы можете импортировать его и назначить нужным серверам/службам Exchange Server с помощью обычной методики.
10 комментариев
————————————
В этой статье я покажу ручной процесс получения установки сертификата, а в следующей статье поговорим об автоматизации.
———————————
Продолжения еще нет или я плохо искал на сайте?
Годноя статья. Автору респект.
Забыли только про команду — «Import-Module ACMESharp»
И тем у кого не будет параметров для DNS сервера после выполнения команды — Complete-ACMEChallenge autod-test -ChallengeType dns-01 -Handler manual
Используйте !после этой команды следующую —
(Update-ACMEIdentifier autod-test -ChallengeType dns-01).Challenges | Where-Object {$_.Type -eq «dns-01»}
Она отобразит необходимые настройки
А чистить записи TXT потом не надо?
«После того, как у вас появился pfx файл, вы можете импортировать его и назначить нужным серверам/службам Exchange Server с помощью обычной методики»
Не понял , где он должен появиться?
отвечу на свой же вопрос, появится скорее всего в C:\windows\system32 (рабочий каталог повершел)
Let’s Encrypt начал выдавать wildcard сертификаты.
>а в следующей статье поговорим об автоматизации.
Пожалуйста, напишите эту статью с учётом wildcard .
Прошло еще меньше двух недель с момента выпуска wildcard сертфикатов, модули еще не обновили 🙂
очень ждём обещанного продолжения по автоматизации выпуска и установки сертификатов
я так понимаю, сейчас с автоматизацией обновления сертификатов, полученных через подтверждение владения через DNS есть проблемы, так как те самые [txt] записи, которые нужно прописывать в днс своего домена тоже имеют время жизни, которое, ко всему прочему, короче времени действия самого сертификата, то есть весь процесс создания Acme-Identifiers и их прописывания придется производить вручную, в случае если ДНС-ы ваши хостятся у провайдера.
Если же NS-сервера у Вас расположены локально в рабочей сети, обновить тхт-записи не составит труда с помощью powershell и тогда весь процесс обновления сертификата можно уместить в один несложный скрипт.