В моей практике мы часто сталкиваемся с простейшими задачами, которые в свою очередь несут огромную пользу, но полного мануала найти не просто и приходится собирать по крупицам. Статью пишу по большей степени для себя, так как сертификат 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)


  1. roman901
    17.05.2023 11:29
    +8

    Т.е.

    1. Let's Encrypt сертификаты специально живут три месяца, чтобы их renew был автоматизирован, а не копировать сертификат ручками на машину каждый раз

    2. Так вы еще и сертификат с приватным ключом скормили какому-то непонятному сервису. Это вообще противоречит всей концепции и делать так ни в коем случае нельзя.


    1. MyZoneITteam Автор
      17.05.2023 11:29
      +1

      На IIS не нашел возможности автоматизировать, но и здесь скорее я описал вариант именно ручного создания сертификата, как файла. Иногда и такие кейсы есть.

      Что касается скармливания стороннему сервису - спасибо за комментарий


      1. roman901
        17.05.2023 11:29

        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 сидел, и оно нормально работало.


        1. MyZoneITteam Автор
          17.05.2023 11:29

          Ок, спасибо!

          Но опять же, статья именно про ручное создание сертификата и его ручное размещение на IIS


          1. roman901
            17.05.2023 11:29
            +1

            Конкретно с LE они у себя на сайте не рекомендуют это.

            If your hosting provider doesn’t want to integrate Let’s Encrypt, but does
            support uploading custom certificates, you can install Certbot on your own
            computer and use it in manual mode.
            In manual mode, you upload a specific file to your website to prove your
            control. Certbot will then retrieve a certificate that you can upload to your
            hosting provider. We don’t recommend this option because it is time-consuming
            and you will need to repeat it several times per year as your certificate
            expires. For most people it is better to request Let’s Encrypt support from your
            hosting provider, or switch providers if they do not plan to implement it.


            1. MyZoneITteam Автор
              17.05.2023 11:29

              Ну здесь скорее предупреждение, так как занимает время. Но опять же, задачи бывают разные и настраивать автоматизацию ради, например, промо страницы сроком жизни 1 месяц не имеет смысла.


  1. Angel_of_Sorrow
    17.05.2023 11:29

    Сертификат конвертируется локально через openssl. Не надо его кому-то отдавать. Так себе паттерн в статье конечно.

    Ждем некоторое время (в моем случае около 15 минут, и за частую срабатывает раза с 3 или 4го, так как тороплюсь)

    Так делать не надо - у letsEncrypt есть допустимое количество попыток, потом он отправить вас на сутки отдохнуть.


    1. MyZoneITteam Автор
      17.05.2023 11:29

      В описанном кейсе ты генеришь txt запись и скармливаешь ее dns. Попытка только одна. OpenSSL посмотрю - спасибо


  1. ajijiadduh
    17.05.2023 11:29
    +2

    но полного манула найти не просто

    можно попробовать в зоопарке поискать


    1. MyZoneITteam Автор
      17.05.2023 11:29
      -1

      Конкретно для моего кейса не нашел


  1. aborouhin
    17.05.2023 11:29
    +3

    В добавление ко всему перечисленному - DNS-зону лучше бы держать если не у себя, то у провайдера, который предоставляет какой-то API, поддерживаемый certbot'ом или acme.sh. Тогда перевыпуск сертификата нормально автоматизируется даже если его реально надо выпускать не на том сервере, на котором используется. Я у себя тоже, скажем, централизованно wildcard-сертификат получаю, а потом уже с помощью ansible он конвертируется в несколько разных форматов (тут да, openssl в помощь) и раскидывается по всем серверам.


  1. amkartashov
    17.05.2023 11:29

    Хороший пример статьи, которую не надо было публиковать. Поясню:

    1. Вредный совет: установка LE сертификатов руками

    2. Супервредный совет: приватный ключ отдаётся третьей стороне

    3. Тривиальная задача: на статью не тянет

    4. Тривиальная задача решена без предварительного минимального гуглежа

    5. Тривиальная задача решена через жопу MacOS

    6. И сверху всей этой кучи гордый тег DevOps

    Не пиши больше.