Получение бесплатного сертификата Let's Encrypt для IIS

Получение бесплатного сертификата Let's Encrypt для IIS

SSL-сертификация сайтов с каждым днем вызывает все большую головную боль для веб-разработчиков и владельцев сайтов. Сперва Google пригрозились худшим ранжированием сайтов не имеющих защищенное соединение (HTTPS), многие веб-разработчики установили бесплатные SSL-сертификаты от StartCom. Однако с выходом Mozilla Firefox версии 51.0.1 и Google Chrome версии 56 сертификатам WoSign и StartCom доверия больше нет. Что ж, тогда мы обратили внимание на Let's Encrypt.  Почему ранее мы как и многие другие веб-разработчики обходили стороной этот вариант, так это из-за маленького срока действия сертификата - 3 месяца. То есть через каждые 3 месяца сертификат подлежит обновлению, а лучше, если это делать каждые 60 дней.

Инструкций как сделать сертификат на Let's Encrypt в ОС Linux много, поэтому затруднений это вызвать не должно. Однако как это сделать для сайтов работающих на ОС Windows с IIS оказалось найти не так просто и не так подробно как это хотелось бы. Поэтому была создана эта инструкция.

Как это сделать используя только Windows, можно посмотреть здесь:

Но нас это также не порадовало, т.к требуется установка MS Visual Studio, что как-то совсем не по феншую.

Выход конечно не очень тривиальный, но для нас было самое то! Делаем сертификат для Windows из под Linux!

Потребуется установить CertBot. Для этого скачиваем его:

wget https://dl.eff.org/certbot-auto

Даём права на запуск:

chmod a+x certbot-auto

и запускаем для получения сертификата в ручном режиме:

./certbot-auto certonly --authenticator manual

Скрипт запросит пароль и возможно доустановит дополнительные пакеты, от которых он зависим, в нашем случае это были mod_ssl, python-tools и python2-virtualenv:

Зависимости certbot

Далее CertBot попросит вашу электронную почту для восстановления доступа в будущем:

email CertBot

Спросит согласны ли вы с их условиями предоставления услуг здесь: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf, если да, то отвечаем "A":

Условия предоставления услуг CertBot

Затем спросят могут ли они отправить вам информацию о своей работе по защите данных, если согласны - отвечаем Y:

CertBot

В следующем шаге наконец-то вводим наше доменное имя:

CertBot спросит может ли он сохранить ваш IP адрес в логах Let's Encrypt:

Логи Let's Encrypt

Теперь начинается самое интересное, нам нужно подтвердить владение доменом, для этого нужно будет сделать некоторые изменения в настройках IIS, а именно разрешить отображение файлов не имеющих расширение. Для этого идем в IIS раздел "Типы MIME":

Настрока IIS

Теперь нам нужно добавить свой тип, для этого в правой колонке нужно нажать на "Добавить...":

Настройка IIS для CertBot

Откроется окно где нам следует ввести следующее:

Добавление типа MIME

В расширение файла вводим точку, а в "Тип MIME" вводим "text/html". Теперь мы можем проходить проверку Let's Encrypt на владение доменом.

Возвращаемся к командной строке в Linux и после шага на разрешение использования нашего IP-адреса в логах Let's Encrypt мы видим, что система просит нас о создании дополнительных директорий и файла в корневой директории сайта:

Подтверждение домена

Создаем в корневой директории сайта папку ".well-known", а в ней папку "acme-challenge" и уже в последней файл с указанными именем и содержанием.

После того как все будет готово к проверке в консоли Linux жмем клавишу Enter и, если вы все правильно сделали в директории "/etc/letsencrypt/live/<имя домена>" будут находится сертификаты:

  • cert.pem - сертификат сервера, используется для Apache (SSLCertificateFile);
  • chain.pem - сертификат цепочки, используется для Apache (SSLCertificateChainFile);
  • fullchain.pem - используется для соединения cert.pem и chain.pem, в Nginx в параметре ssl_certificate;
  • privkey.pem - приватный ключ для сертификата, используется для Apache (SSLCertificateKeyFile) и Nginx в параметре ssl_certificate_key.

Осталось из полученных от Let's Encrypt файлов получить сертификат в легитимном виде для MS Windows. Идем в консоль с правами ROOT (для этого испольщуем команду "su") и переходим в директорию "/etc/letsencrypt/live/<имя домена>" и запускаем в консоли OpenSSL:

openssl

конвертируем сертификаты в нужный нам pfx-формат:

pkcs12 -inkey privkey.pem -in fullchain.pem -export -out yourdomain.pfx

Система запросит ввод и подтверждение пароля:

Конвертирование сертификата в pfx

OpenSSL нам больше не нужен, поэтому выходим из него с помощью команды "quit". Копируем pfx-сертификат без сохранения атрибутов в домашнюю директорию, чтобы мы смогли с ним работать без root'а:

cp --no-preserve=all yourdomain.pfx /home/<имя пользователя>/

Теперь мы можем копировать полученный сертификат на машину с Windows любым удобным для вас способом.

Для его установки в Диспетчере служб IIS идем в раздел "Сертификаты сервера" и в правой колонке жмём на "Испортировать...", где в открывшемся окне указываем файл сертификата и пароль, заданный в консоле Linux во время конвертирования сертификата. В результате ваш сертификат должен оказаться в списке "Сертификаты сервера":

Сертификаты сервера IIS

Не забываем зайти в привязки узла и выбрать в https привязке узла новый сертификат.

После чего перезагружаем сервер IIS и радуемся результату!

P.S. Для обновления сертификата на Linux машине, где сертификат генерировался ранее следует выполнить команду:

./certbot-auto renew

после чего вновь их нужно будет конвертировать в PFX-формат и импортировать в IIS.