В моей практике мы часто сталкиваемся с простейшими задачами, которые в свою очередь несут огромную пользу, но полного мануала найти не просто и приходится собирать по крупицам. Статью пишу по большей степени для себя, так как сертификат Let’s Encrypt создается на 3 месяца и каждый раз приходится искать ссылки и запросы в терминале (заново все собирать по крупицам).
В этой статье я расскажу, как установить SSL сертификат Let’s Encrypt, созданный на MacOS, на IIS сервер.
Первое, что нам нужно – это установить certbot на MacOS. Для этого нам нужно установить homebrew. Останавливаться здесь я не буду, а просто укажу ссылку на homebrew - https://brew.sh. Здесь проблем не должно быть, если будут сложности – пишите в комментариях, я помогу.
Запускаем терминал и пишем:
brew install certbot
Далее нам нужно создать сертификат, с проверкой через dns. Есть и другие варианты проверки доменного имени, но я использую этот. Делать будем на примере создания сертификата для доменного имени bpo.travel
Пишем в командной строке следующую строчку:
sudo certbot certonly --manual --preferred-challenges dns -d "bpo.travel"
Мы должны получить следующий ответ, который просит нас создать txt запись на нашем DNS сервере для доменного имени _acme-challenge.bpo.travel с указанным value
Далее мы идем на наш DNS сервер (в нашем случае это 1gb.ru) и создаем txt запись c указанным значением
Ждем некоторое время (в моем случае около 15 минут, и зачастую срабатывает раза с 3 или 4го, так как тороплюсь), возвращаемся в терминал и нажимаем Enter. В ответе мы должны увидеть следующее
Если вдруг нажали Enter раньше времени и DNS запись не успела обновиться, то увидим следующий ответ
В таком случае придется делать запрос заново и прописывать TXT запись на DNS сервере с новым значением value
Если все ок, то открываем Finder и идем по адресу /etc/letsencrypt/archive/
Далее мы копируем папку bpo.travel например в загрузки (при копировании вводим пароль от своего компьютера)
Затем нам нужно создать pfx сертификат из готового pem сертификата, который нам создал certbot и который лежит с ключами в папке bpo.travel, которую мы скопировали
Для этого ищем конвертер сертификатов. Я использую следующий:
https://www.sslshopper.com/ssl-converter.html
Подгружаю все созданные файлы и нажимаю Convert Certificate
В итоге получаю готовый pfx сертификат. Далее нам нужно установить его на нашем IIS сервере. В моем случае я удаленно подключаюсь к нему через RDP и захожу в Диспетчер служб IIS
Далее я удаляю старый сертификат. Для этого мне нужно зайти в сертификаты сервера
и удалить сертификат bpo.travel
Затем нам нужно установить на наш сервер новый сертификат. Для этого просто кликаем по сертификату и устанавливаем его для локального компьютера (это единственное, что нужно изменить, далее все оставляем как есть и нажимаем далее, далее, …)
После этого возвращаемся в наш IIS, выбираем наш сайт (bpo.travel), вызываем контекстное меню правой кнопкой мыши и выбираем пункт «Изменить привязки» и заполняем все как на скриншоте
Нажимаем ОК.
На этом все, сертификат успешно установлен.
Это мой первый опыт написания статьи, если нужно что-то дополнить или объяснить – пишите в комментариях.
Комментарии (12)
Angel_of_Sorrow
17.05.2023 11:29Сертификат конвертируется локально через openssl. Не надо его кому-то отдавать. Так себе паттерн в статье конечно.
Ждем некоторое время (в моем случае около 15 минут, и за частую срабатывает раза с 3 или 4го, так как тороплюсь)
Так делать не надо - у letsEncrypt есть допустимое количество попыток, потом он отправить вас на сутки отдохнуть.
MyZoneITteam Автор
17.05.2023 11:29В описанном кейсе ты генеришь txt запись и скармливаешь ее dns. Попытка только одна. OpenSSL посмотрю - спасибо
ajijiadduh
17.05.2023 11:29+2но полного манула найти не просто
можно попробовать в зоопарке поискать
aborouhin
17.05.2023 11:29+3В добавление ко всему перечисленному - DNS-зону лучше бы держать если не у себя, то у провайдера, который предоставляет какой-то API, поддерживаемый certbot'ом или acme.sh. Тогда перевыпуск сертификата нормально автоматизируется даже если его реально надо выпускать не на том сервере, на котором используется. Я у себя тоже, скажем, централизованно wildcard-сертификат получаю, а потом уже с помощью ansible он конвертируется в несколько разных форматов (тут да, openssl в помощь) и раскидывается по всем серверам.
amkartashov
17.05.2023 11:29Хороший пример статьи, которую не надо было публиковать. Поясню:
Вредный совет: установка LE сертификатов руками
Супервредный совет: приватный ключ отдаётся третьей стороне
Тривиальная задача: на статью не тянет
Тривиальная задача решена без предварительного минимального гуглежа
Тривиальная задача решена через
жопуMacOSИ сверху всей этой кучи гордый тег DevOps
Не пиши больше.
roman901
Т.е.
Let's Encrypt сертификаты специально живут три месяца, чтобы их renew был автоматизирован, а не копировать сертификат ручками на машину каждый раз
Так вы еще и сертификат с приватным ключом скормили какому-то непонятному сервису. Это вообще противоречит всей концепции и делать так ни в коем случае нельзя.
MyZoneITteam Автор
На IIS не нашел возможности автоматизировать, но и здесь скорее я описал вариант именно ручного создания сертификата, как файла. Иногда и такие кейсы есть.
Что касается скармливания стороннему сервису - спасибо за комментарий
roman901
https://winitpro.ru/index.php/2017/11/03/ustanovka-besplatnogo-ssl-sertifikata-lets-encrypt-na-iis-v-windows-server-2012-r2/ - банально первая же ссылка в гугле по запросу "letsencrypt windows iis".
Если не изменяет память, много лет назад WACS сам использовал, когда на IIS сидел, и оно нормально работало.
MyZoneITteam Автор
Ок, спасибо!
Но опять же, статья именно про ручное создание сертификата и его ручное размещение на IIS
roman901
Конкретно с LE они у себя на сайте не рекомендуют это.
MyZoneITteam Автор
Ну здесь скорее предупреждение, так как занимает время. Но опять же, задачи бывают разные и настраивать автоматизацию ради, например, промо страницы сроком жизни 1 месяц не имеет смысла.