Пришлось искать способ защитить домены в зонах RU, РФ...

Если вам нужен SSL-сертификат, но вы не являетесь специалистом в веб-технологиях, то эта заметка для вас. Описан простой способ выпуска базового SSL-сертификата Let’s Encrypt в ручном режиме, на локальном компьютере с Windows, с помощью приложения Certbot. Этот способ позволяет получить файлы SSL-сертификата в папку на своём локальном компьютере, после чего можно установить сертификат на свой хостинг.

Потребность в SSL-сертификатах возникла у меня в связи с тем, что срок старых истёк, а создать новые оказалось невозможным из-за возникших ограничений на доменные зоны RU и РФ. Если у вас такая же проблема или вам просто надоело искать веб-сервис для выпуска SSL-сертификатов, то эта заметка вам поможет.

Поскольку я пока не знаю наилучшего пути, то ниже просто опишу ту последовательность действий, которую сам выполнил и которая позволила мне создать SSL-сертификаты для десяти своих доменов (в том числе в зонах RU и РФ), а значит и вам этот способ может помочь.

Создание SSL-сертификата на локальном компьютере

  1. Установил на свой локальный компьютер (с операционной системой Windows 11) программу Certbot.

    Установочный файл Certbot взял с официального сайта здесь (см. ссылку на загрузку дистрибутива в п.3 на открывшейся по ссылке странице).

    Запустил скачанный установщик и в диалоге установки изменил адрес установки на: C:\Certbot

Работа с программой Certbot осуществляется через командную строку или PowerShell (я использовал PowerShell). На время выпуска сертификата, естественно, компьютер должен быть подключен к сети Интернет.

  1. Открыл PowerShell (х86) с правами администратора.

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

  2. В окне PowerShell с помощью команд cd перешёл в каталог Certbot (вводил как показано на скриншоте и нажимал в конце строки клавишу Enter):

  1. Вставил из буфера обмена команду для создания сертификата (можете скопировать её из этой строки):

    certbot certonly --authenticator manual

    И нажал клавишу Enter.

    Перед нажатием Enter окно PowerShell выглядело с этой командой так:

  1. Система предложила ввести свой email (я ввёл), согласился с условиями (нажимая клавишу Y), в следующий раз программа на этом шаге уже не просила вводить email, а сразу предлагала ввести имена доменов (я вводил сразу по два – второй с www, через запятую):

  1. Программа попросила создать файл проверки прав на домен. При этом показано какую строку символов и в файл с каким именем поместить, по какому адресу на веб-сервере этот файл положить:

Поскольку я вводил по два доменных имени (обычное и с www), то после нажатия Enter программа точно так же просила создать ещё один проверочный файл.

С помощью Filezilla Client я создал нужные файлы по требуемому адресу, создав нужные директории. Выделенный текст из окна PowerShell можно копировать просто правым кликом, или привычным сочетанием клавиш Ctrl+C.

  1. Нажал клавишу Enter для создания сертификата, но только после того, как проверочные файлы на веб-сервере были созданы.

    Система сообщила об успешном создании файлов сертификата, которые я нашёл на своём локальном компьютере, в папке:

    C:\Certbot\archive\[имя домена]

    Если бы сертификат не был создан, то программа сообщила бы об ошибке.

Вот и всё, сертификаты готовы!

Для установки их на хостинг мне потребовались три файла из четырёх, из данной папки:

cert1.pem – сертификат
chain1.pem – промежуточный сертификат
privkey1.pem – приватный ключ

Ограничения

Через каждые 90 дней нужно перевыпускать сертификат заново.

P.S.:

Я ещё не озадачился тем, как автоматизировать описанный выше процесс (мне интересен перевыпуск сертификата именно на локальном компьютере с Windows). Было бы здорово, если бы знающий человек написал в комментариях как это сделать.

Комментарии (65)


  1. 42p
    22.05.2022 22:46
    +16

    LetsEncrypt сертификаты можно выпускать и с верификацией по DNS. Из клиентов например https://github.com/acmesh-official/acme.sh умеет автоматически работать с огромным количеством DNS сервисов и выпускать wildcard сертификаты (т.е. основной домен и все поддомены уровня выше). Возможно даже заведется на windows, но проще гарантированно завести на windows subsystem linux.
    Чуть правильнее было бы задать соотвествующий вопрос в Q&A, чем писать очевидный мануал на профильном портале :)


    1. ElleSolomina
      22.05.2022 23:09
      -4

      Поддерживаю, гораздо полезнее обсуждать нормальные сертификаты и желательно длительные.


    1. karavan_750
      23.05.2022 00:05
      +1

      Много плюсов к упоминанию acme.sh.

      умеет автоматически работать с огромным количеством DNS сервисов и выпускать wildcard сертификаты

      А если воспользоваться ручным режимом, то можно утверждать, что умеет работать с любым DNS сервисом, который доступен миру. (wildcard в ручном режиме доступен)
      https://github.com/acmesh-official/acme.sh/wiki/DNS-manual-mode


    1. WinLin2
      23.05.2022 04:33

      Использую acme.sh и есть проблема с подтверждением через yandex-dns. В настройках ожидание 600 секунд, в dns записи появляются, а LetsEncrypt срабатывает с десятого раза и обычно только ночью.


      1. idmrty
        23.05.2022 09:10
        +5

        У Яндекса невероятно долго обновляются DNS-записи. Могут часами не отдавать новые значения — какие уж там 600 секунд...


    1. VadimLjovkin Автор
      23.05.2022 07:55
      +4

      Я искал информацию о ручном выпуске сертификата на Хабре (очень люблю этот портал), но не нашёл, поэтому написал сам, для таких же неспециалистов в веб-технологиях как и я сам. Спасибо за ссылку!


    1. VadimLjovkin Автор
      23.05.2022 07:56
      +1

      Мне нужен был способ подтверждения домена по http, поэтому и описанный способ подошёл.


  1. ifap
    22.05.2022 23:49
    +10

    Если вам нужен SSL-сертификат, но вы не являетесь специалистом в веб-технологиях

    то с грехом пополам вы его выпустите по этой или другой подобной инструкции, а потом все равно не сможете правильно вкорячить на свой сайт ;)


    1. VadimLjovkin Автор
      23.05.2022 08:03
      +1

      Уже несколько обновляю сертификаты на своих небольших личных проектах. Устанавливаю через обычный визуальный интерфейс хостинга. Никакой автоматизации в этом отношении нет. Пока до этого руки не дошли. Не всё сразу :)


      1. ifap
        23.05.2022 11:02

        Так я не про Вас лично ;) Я просто сомневаюсь, что запрос сертификата "вручную" - наибольшая проблема в процессе ручной установки.


      1. CoderSafe
        23.05.2022 11:55

        Что делать когда выбивается такая ошибка?


        1. CoderSafe
          23.05.2022 12:20

          Уже разобрался спасибо )))


          1. VadimLjovkin Автор
            23.05.2022 12:26
            +1

            Отлично! Рад пользе!



  1. SDKiller
    23.05.2022 02:05
    +2

    А зачем вообще на локальном компе это делать, если есть доступ к серверу?


    1. MasMaX
      23.05.2022 07:58
      +2

      Тоже задумался надл этим вопросом. Где сертификат используется - там и генерируется. Тем более у certbot есть встроенный механизм автообновления.


    1. VadimLjovkin Автор
      23.05.2022 08:09
      +2

      Чтобы мне было понятно что делаю. Встречаемые мною инструкции по установке Certbot на сервер для меня пока что сложны (всё-таки у меня совсем другой профессиональный профиль). В различных видео-мануалах авторы зачастую забывают указать даже название открытой перед ними программы, в которую они вводят команды. Думают, что всё очевидно, наверное... Много потерянного времени. Мне сейчас проще так выпустить себе сертификаты.


  1. terantul
    23.05.2022 04:05
    +4

    Почему я не пишу статьи на Хабр? Потому что следую совета умного человека - забей тему потенциальной статьи в гугл и посмотри на результат, если имеется хотя бы 3 линка на идентичный материал - писать не стоит, ибо это уже с 99% вероятностью есть на Хабре.

    -Это уже было в Симпсонах(с)


    1. VadimLjovkin Автор
      23.05.2022 08:10
      +3

      Я на Хабре не нашёл. Поэтому и написал, чтобы помочь таким же нуждающимся как я :)


  1. BosonBeard
    23.05.2022 04:12
    +6

    А я поддержу автора, хоть материал и во многом вторичен, чувствуется, что человек постарался, как минимум тщательно оформил текст. Может кому этот материал в итоге пригодится.


    1. VadimLjovkin Автор
      23.05.2022 07:46
      +1

      Большое спасибо!


  1. 13werwolf13
    23.05.2022 06:10
    +2

    плюсик за оформление статьи и минусик за тему

    >> генерировать сертификат на десктопе с виндой при том что он нужен на сервере с линуксом
    >> генерировать сертификат НЕ через DNS подтверждение
    >> не сделать авторотейт сертификатов

    похоже на выстрел в ногу. если взять не certbot а какой нибудь lego например то он с огромной кучей DNS провайдеров по api умеет работать. закинуть в крон и не париться о сертификате долгие годы.


    1. 13werwolf13
      23.05.2022 07:23

      upd:

      генерировать сертификат НЕ через DNS подтверждение

      написал не так как было в голове и теперь не могу отредактировать, но думаю и так понятно что я имел ввиду


    1. VadimLjovkin Автор
      23.05.2022 08:18
      +1

      Спасибо за плюсик :). Это приятно.
      Заметка для неспециалистов, это однозначно сформулировано в начале. Мне бы она точно помогла сэкономить время, поэтому я её и написал. Про авторотейт я пока даже не слышал.
      Никто не рождается со знанием в голове. Все его добывают. На это требуется время.
      Если человек не знает как выпустить SSL-сертификат, но ему срочно нужно, то мануал ему поможет. Как помог бы мне. Я рад этому.
      Спасибо за минус, буду знать за что :)


    1. Anrikigai
      23.05.2022 09:32
      +2

      Есть разные кейсы. Если Shared hosting не поддерживает letsencrypt сам из коробки, установить туда certbot будет проблематично. Все, что вы можете - заливать файлы по FTP/через веб морду.

      Касательно DNS - во-первых, все равно нужно установить/запустить в докере... Во-вторых, спасибо за ссылку на lego, не знал про него. К сожалению, несмотря на значительное количество поддерживаемых DNS провайдеров, воспользоваться сможет далеко не каждый:

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


      1. VadimLjovkin Автор
        23.05.2022 09:36

        Большое спасибо!


      1. 13werwolf13
        23.05.2022 09:39
        +2

        Не соглашусь про шаред хостинги, обычно у них le работает вообще по галочке в настройках вихоста

        А причём тут лохер я вообще не понял


        1. Anrikigai
          23.05.2022 10:17
          +1

          Ключевое слово "обычно". В свое время, когда я выбирал дешевый хостинг, для меня было экстазом наличие такой фичи у выбранного дешевого хостера. Обычно просили денег. У "больших" может и норма, но здесь речь именно про совсем новичков.

          Что такое "лохер" теперь уже я не понял :)

          Впрочем, это неважно. Я лишь хотел сказать, что для таких статей место вполне есть. Сейчас я могу надувать щеки и рассказывать, как собрал на внешнем сервере контейнер с Nginx reverse proxy для доступа к домашним ресурсам, спрятанным за двойным Hide NAT с автоматическим обнаружением новых контейнеров, генерации для них конфигов и обновлением сертификатов. Но много лет назад мне бы такая инструкция весьма пригодилось бы.


          1. 13werwolf13
            23.05.2022 10:48

            Лохер = докер

            Простите, привычка.


  1. nrr
    23.05.2022 08:20

    Если у вас виртуальный или физический сервер, то автоматическое продление сертификатов обычно идет из коробки.
    Для такого случая здесь инструкции для различных серверов:
    https://certbot.eff.org/instructions
    В форме необходимо выбрать тип веб сервера и свою ОС, и вы получите пошаговую инструкцию по настройке certbot для получения сертификатов letsencrypt.

    Если у вас виртуальный хостинг, то вот здесь есть инструкции для различных хостинг провайдеров, правда российских там не обнаружил:
    https://certbot.eff.org/hosting_providers/


    1. VadimLjovkin Автор
      23.05.2022 08:25
      +1

      К сожалению на моём хостинге нет автовыпуска и тем более автопродления SSL-сертификатов (даже базовых). Хостер хочет более 5 тыс. руб. за сертификат :).
      Не спрашивайте какой хостер, я всё равно пока менять не собираюсь :).

      Спасибо за ссылки! Я там был, но инструкции для меня оказались сложны (много пробелов пока что).


  1. stand_alone_complex
    23.05.2022 08:25
    -2

    В свете всяких пакостей в опенсорс проектах — "скачайте не ведомую зверушку и выпустите с её помощью сертификат". В скриптах хоть посмотреть можно что должно происходить...


    1. VadimLjovkin Автор
      23.05.2022 08:27
      +1

      Что скачивать и ставить каждый решает сам. А в скриптах смотреть ещё умение требуется. Заметка написана для неспециалистов.


    1. kAIST
      23.05.2022 10:16

      А ничего, что certbot это и так скрипт, который написан на питоне?

      Кстати, вы этот комментарий написали тоже через скрипт?


  1. allohakat
    23.05.2022 08:25
    +3

    Мне по заголовку казалось, что здесь будет что-то более нетривиальное, какой-нибудь альтернативный бесплатный провайдер хотя бы… А всё опять про let's encrypt.

    У меня есть содержательный вопрос, для которого let's encrypt, к сожалению, не подходит. Допустим, я для своего pet project с одной стороны не хочу морочиться с DNS (слишком уж он pet), а с другой — не хочу, чтобы у пользователей браузер орал «соединение небезопасно!!!1111одинодин». Как получить сертификат на «голый» IP-адрес? Платники (вот уж кто всем торговцам воздухом торговец воздухом, по сравнению даже со сторонниками копирайта) такое позволяют, let's encrypt сопротивляется.


    1. VadimLjovkin Автор
      23.05.2022 08:31

      Спасибо за интерес к теме! К сожалению я не специалист в этом вопросе. Просто поделился способом, который сам искал. Может быть кто-то из знатоков сможет рассказать как получить сертификат на «голый» IP-адрес. Или поделится адресом бесплатного альтернативного провайдера.


      1. 42p
        23.05.2022 10:08

        https://zerossl.com/pricing/
        Они умеют выпускать сертификаты на голый ip через http верификацию. Через тот acme.sh клиент, но нужно немного запариться и законфигурировать туда свою учетку от zerossl.


    1. Anrikigai
      23.05.2022 09:36

      sslip.io не поможет?

      Выпустите сертификат на https://52-0-56-137.sslip.io, и он будет разрезолвится в 52.0.56.137


  1. tuxi
    23.05.2022 08:42
    +6

    Люди, вы чего такие злые? На фоне массы статей "боремся с дидосом с помощью скриптов на php", это вполне годная статья, да еще и оформленная толково.


    1. VadimLjovkin Автор
      23.05.2022 08:49

      Большое спасибо!


      1. klerik
        23.05.2022 09:49
        +4

        Есть вот такой неплохой способ.

        И в принципе это полуавтоматический или даже автоматический способ для получения SSL для всех своих проектов. IMHO это более удобно, чем ваш способ.

        https://github.com/win-acme/win-acme


        1. VadimLjovkin Автор
          23.05.2022 10:12

          Большое спасибо за ссылку! Обязательно прочитаю об этом способе!


        1. Splendidus
          23.05.2022 10:47

          Зашел в комменты увидеть ссылку на этот софт. ) Лучшая софтина для SSL под Винду.

          • Интуитивно понятный интерфейс, даже не нужно разбираться в технологиях.

          • Софтина сама подвяжет серт на нужный сайт в IIS.

          • И автопродление. Поставил и забыл.


  1. CarrolCox
    23.05.2022 12:22

    не хотите заниматься выпуском и ротацией самостоятельно?

    не хотите / не умеете / нет времени автоматизировать всё это?

    посмотрите на готовые встроенные опции работы с let's encrypt у хостера или у вашего web / reverse proxy / api gateway сервера

    например traefic / kong / openresty (nginx + lua) уже умеют это сами или с плагином


    1. VadimLjovkin Автор
      23.05.2022 13:12

      Мой хостер продаёт базовые SSL )).


      1. CoderSafe
        23.05.2022 13:40
        +1

        Согласен, у меня та же ситуация. Особенно когда при санкциях нужно от 1-2 дней что бы выпустить сертификат (по крайней мере так у моего хостера). А благодаря этой статье можно получить SSL за 5 минут и пользоваться. Сейчас ищу только как сделать авто продление )


        1. VadimLjovkin Автор
          23.05.2022 15:11

          Приятно знать, что статья пригодилась!


  1. endpoints
    23.05.2022 15:09
    +1

    Сохранил спасибо! только вчера хотел установить бесплатный SSL на свой сайт btat.ru Сегодня думаю получится самому сделать


    1. VadimLjovkin Автор
      23.05.2022 15:12

      Спасибо за обратную связь! Рад пользе!


      1. endpoints
        23.05.2022 19:14

        не получается у меня((( делаю на windows 7, пишет:


        1. endpoints
          23.05.2022 19:20

          если просто запускать certbot.exe выдает ошибку

          как я понял, для запуска требуется python, ладно установил python 3.8, но ошибка не ушла


          1. endpoints
            23.05.2022 19:26

            потом установил обновление kb2999226 чтобы добавить эту библиотеку, но все равно такая ошибка


            1. endpoints
              23.05.2022 19:45

              пошел по другому пути, зашел на свой сервер через rdp, запустил, вроде все идет, но не понял этот пункт:

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

              какие проверочные файлы надо создавать? и куда их ложить?


              1. CoderSafe
                23.05.2022 19:52
                +1

                Смотри, давай помогу.

                Когда у тебя появляется такая запись то ты должен создать на сервере директиву example.com/.well-know/acme-challenge/

                И потом создаешь ФАЙЛ(не папку) указанную выше и в ней же ты должен написать вот это


                1. VadimLjovkin Автор
                  23.05.2022 22:11

                  Да, совершенно верно!

                  "Проверочные файлы" - это простые текстовые файлы без расширения, с указанным в окне PowerShell именем и с указанным содержимым (их Вам подчеркнули красным выше), которые должны оказаться по указанному там же (в окне PowerShell) адресу.

                  Вы можете создать такие файлы через обычный Блокнот (если файл сохранится с расширением, например .txt, то просто удалите это расширение оставив только имя файла). Затем созданный файл нужно поместить на свой веб-сервер в ту папку, которую показывает Вам PowerShell. Только после этого можно нажать Enter на клавиатуре. То есть нужно делать всё последовательно по инструкции: программа попросила Вас создать файл - создайте и положите его на сервер, потом нажмите Enter. Если Вы ввели два доменных имени (например, второе с www), то программа попросит создать ещё один проверочный файл. Создайте второй и только после этого нажмите Enter.

                  Эти файлы называются проверочными потому, что Certbot проверяет их наличие, заглядывая через интернет. И если находит, то понимает, что домен принадлежит именно Вам (ведь Вы создали эти файлы там, где он попросил и с тем содержимым, которое он указал).

                  Для того, чтобы поместить проверочные файлы на веб-сервер я использовал доступ по FTP к своему сайту (с помощью программы FileZilla, она бесплатна, имеет русский интерфейс).

                  Но, если Вы до сих пор не пользовались FTP-клиентом (например, FileZilla), то можете поместить проверочные файлы в нужную папку (директорию) и через обычный файловый менеджер Вашего хостинга. В любом случае Вам понадобится создать недостающие папки (директории) с именами:

                  .well-known и в ней папку acme-challenge

                  Выглядят проверочные файлы у меня в FileZilla так, как показано в нижней части скриншота (это снимок только нужной части окна FileZilla): нижняя стрелка показывает на файлы, а верхняя стрелка показывает на путь к файлам; у меня там всегда ещё папка docs - она корневая, так устроен мой хостинг, у Вас может быть иначе.

                  Поэтому когда мне PowerShell пишет путь
                  http://orgpsiholog.ru/.well-known/acme-challenge/
                  я должен проверочные файлы поместить с учётом "docs", т.е. так:
                  http://orgpsiholog.ru/docs/.well-known/acme-challenge/


                1. endpoints
                  24.05.2022 00:42
                  +1

                  Благодарю дружище, создал сертификат, вот только никак не могу привязать к домену, домен находится на reg.ru

                  Если кто на днях установил там сертификат, дайте ссылку как там делается все это дело


                  1. VadimLjovkin Автор
                    24.05.2022 07:55

                    Очень рад пользе!


                    По идее, у них должен быть мануал по установке сертификата через веб-интерфейс хостинга. А если нет, то напишите в службу поддержки.


            1. CoderSafe
              23.05.2022 19:47

              Привет, Python тут не причем )

              https://windll.com/ru/dll/microsoft-corporation/api-ms-win-core-path-l1-1-0

              Ознакомиться с ошибкой и исправить вы сможете тут )


          1. VadimLjovkin Автор
            23.05.2022 22:24

            Работа с Certbot в описанном в статье способе осуществляется не напрямую, только через командную строку или PowerShell. Я использовал только PowerShell, и запустить PowerShell нужно от имени администратора.


  1. frkbvfnjh
    23.05.2022 15:17
    -1

    А чем Certbot лучше open-ssl?


    1. VadimLjovkin Автор
      23.05.2022 15:25
      +1

      Certbot - это программа, позволяющая создать SSL-сертификат.

      А что Вы подразумеваете под open-ssl ?


  1. 89Logic
    24.05.2022 21:15

    Вадим, добрый день! Скажите, а как быть если у меня Wildcard сертификат? Этот способ сработает?


    1. VadimLjovkin Автор
      24.05.2022 21:28

      Доброго времени! Если под WildCard имеется в виду сертификат подтверждающий домен и все его поддомены, то (на сколько я знаю) нет, для каждого поддомена придётся выпускать свой сертификат. Я делал разные сертификаты для домена и его поддомена (и даже не проверил, будет ли работать, если сделать просто для верхнего домена). Но Вы можете это проверить.


      1. 89Logic
        24.05.2022 21:30

        Спасибо большое за быстрый ответ :) Попробую)