Наличие SSL сертификата для сайта позволяет защитить данные пользователей, передаваемые по сети от атак человек-посередине (man-in-the-middle) и гарантировать целостность переданных данных В этом обзоре мы расскажем об особенности установки и привязки бесплатного SSL сертификата от Let’s Encrypt для сайта IIS, запущенного на Windows Server 2012 R2.
Пара слов о Let’s Encrypt – это некоммерческий центр сертификации, позволяющий в автоматическом режиме через API выпускать бесплатные SSL/TLS сертификаты. Выдаются только сертификаты для валидации доменов (domain validation), со сроком действия 90 дней, что не является проблемой из-за наличия встроенной возможности автоматического перевыпуска сертификата, в результате чего можно непрерывность защиты.
API интерфейс, позволяющий автоматически выпускать сертификаты называется Automated Certificate Management Environment (ACME) API. Для Windows систем на данный момент имеется 3 реализации клиента ACME API:
- Утилита LetsEncrypt-Win-Simple – утилита командной строки для интерактивного выпуска сертификата и привязки его к определенному сайту на вашем веб сервере IIS
- Модуль Powershell ACMESharp – библиотека Powershell с множеством команд для взаимодействия через ACME API с серверами Let’s Encrypt
- Certify – графическая утилита для интерактивного управления сертификатами через ACME API (на данный момент функционал еще не полный, но проект развивается)
Самый простой способ получить SSL сертификат от Let’s Encrypt — воспользоваться консольной утилитой LetsEncrypt-Win-Simple. Она представляет собой простой мастер, который позволяет выбрать один из сайтов, запущенных на IIS, и автоматически выпустить и привязать к нему SSL сертификат.
Итак, предположим у нас имеется веб сайт на IIS, развёрнутый под управлением Windows Server 2012 R2. Наша задача, переключить его в HTTPS режим, установив SSL сертификат от Let’s Encrypt.
Скачайте последний релиз клиента со страницы проекта на GitHub https://github.com/Lone-Coder/letsencrypt-win-simple (в моем случае это была версия v1.9.7.0).
Распакуйте его в каталог на сервере с IIS: c:\inetpub\letsencrypt
Откройте командную строку с правами администратора, перейдите в каталог c:\inetpub\ letsencrypt и запустите letsencrypt.exe.
Запустится интерактивный мастер, который сначала попросит указать ваш email на который будут отправляться уведомления о проблемах с обновлением сертификата и согласиться с пользовательским соглашением.
Затем нужно будет выбрать, что необходимо создать новый сертификат (N: Create new certificate) и выбрать тип сертификата (в нашем примере нет необходимости использовать сертификат с несколькими SAN), поэтому достаточно выбрать пункт 1. Single binding of an IIS site.
Далее утилита выведет список запущенных на IIS сайтов и предложит выбрать сайт, для которого нужно выпустить сертификат.
Следующий этап – выполнение валидации домена. Доступно несколько вариантов валидации: TLS, через запись в DNS или через HTTP). Самый простой вариант — выбрать пункт 4 [http-01] Create temporary application in IIS (recommended). В этом случае на веб-сервере будет создано небольшое приложение, через которое сервера Let’s Encrypt смогут провести валидацию.
После валидации утилита letsencrypt-win-simple автоматически отправит запрос на генерацию сертификата, скачает его (все необходимые файлы, а также закрытый ключ сохраняются в каталог C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple) и создаст привязку на сайте IIS.
В том случае, если на сайте уже установлен SSL сертификат, он будет заменен новым.
Кроме того, будет создано правило в планировщике заданий Windows, которое запускается каждый день и автоматически выпускающее и устанавливающее новый сертификат каждые 60 дней.
Вручную запустить процедуру перевыпуска сертификата можно такой командой:
LetsEncrypt --renew
Чтобы перенаправить весь входящий HTTP трафик на HTTPS сайт, нужно установить модуль Microsoft URL Rewrite Module, и убедиться, что в настройках сайте не включена опция обязательного использования SSL (Require SSL). Осталось настроить редирект в файле web.config:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Отметим, что сертификаты Let’s Encrypt в настоящий момент широко используются на сайтах многих крупных компаний и им доверяют все браузеры. Надеюсь, что судьба бесплатного центра сертификации Let’s Encrypt не постигнет участь WoSign и StartCom.