
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 попросит вашу электронную почту для восстановления доступа в будущем:
Спросит согласны ли вы с их условиями предоставления услуг здесь: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf, если да, то отвечаем "A":
Затем спросят могут ли они отправить вам информацию о своей работе по защите данных, если согласны - отвечаем Y:
В следующем шаге наконец-то вводим наше доменное имя:
CertBot спросит может ли он сохранить ваш IP адрес в логах Let's Encrypt:
Теперь начинается самое интересное, нам нужно подтвердить владение доменом, для этого нужно будет сделать некоторые изменения в настройках IIS, а именно разрешить отображение файлов не имеющих расширение. Для этого идем в IIS раздел "Типы 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
Система запросит ввод и подтверждение пароля:
OpenSSL нам больше не нужен, поэтому выходим из него с помощью команды "quit". Копируем pfx-сертификат без сохранения атрибутов в домашнюю директорию, чтобы мы смогли с ним работать без root'а:
cp --no-preserve=all yourdomain.pfx /home/<имя пользователя>/
Теперь мы можем копировать полученный сертификат на машину с Windows любым удобным для вас способом.
Для его установки в Диспетчере служб IIS идем в раздел "Сертификаты сервера" и в правой колонке жмём на "Испортировать...", где в открывшемся окне указываем файл сертификата и пароль, заданный в консоле Linux во время конвертирования сертификата. В результате ваш сертификат должен оказаться в списке "Сертификаты сервера":
Не забываем зайти в привязки узла и выбрать в https привязке узла новый сертификат.
После чего перезагружаем сервер IIS и радуемся результату!
P.S. Для обновления сертификата на Linux машине, где сертификат генерировался ранее следует выполнить команду:
./certbot-auto renew
после чего вновь их нужно будет конвертировать в PFX-формат и импортировать в IIS.