Нужен бесплатный SSL-сертификат? Легко +14


Пришлось искать способ защитить домены в зонах 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
    /#24367156 / +16

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

    • ElleSolomina
      /#24367214 / -4

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

    • karavan_750
      /#24367334 / +1

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

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

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

    • WinLin2
      /#24367610

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

      • idmrty
        /#24367922 / +5

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

    • VadimLjovkin
      /#24367772 / +4

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

    • VadimLjovkin
      /#24367774 / +1

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

  2. ifap
    /#24367300 / +10

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

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

    • VadimLjovkin
      /#24367802 / +1

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

      • ifap
        /#24368402

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

  3. SDKiller
    /#24367520 / +2

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

    • MasMaX
      /#24367782 / +2

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

    • VadimLjovkin
      /#24367812 / +2

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

  4. terantul
    /#24367582 / +4

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

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

    • VadimLjovkin
      /#24367814 / +3

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

  5. BosonBeard
    /#24367586 / +6

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

  6. 13werwolf13
    /#24367660 / +2

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

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

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

    • 13werwolf13
      /#24367730

      upd:

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

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

    • VadimLjovkin
      /#24367820 / +1

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

    • Anrikigai
      /#24367974 / +2

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

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

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

      • 13werwolf13
        /#24367998 / +2

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

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

        • Anrikigai
          /#24368160 / +1

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

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

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

  7. nrr
    /#24367826

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

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

    • VadimLjovkin
      /#24367838 / +1

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

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

  8. stand_alone_complex
    /#24367842 / -2

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

    • VadimLjovkin
      /#24367848 / +1

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

    • kAIST
      /#24368156

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

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

  9. allohakat
    /#24367844 / +3

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

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

    • VadimLjovkin
      /#24367858

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

      • 42p
        /#24368110

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

    • Anrikigai
      /#24367986

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

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

  10. tuxi
    /#24367870 / +6

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

    • VadimLjovkin
      /#24367878

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

      • klerik
        /#24368056 / +4

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

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

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

        • VadimLjovkin
          /#24368138

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

        • Splendidus
          /#24368330

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

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

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

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

  11. CarrolCox
    /#24368812

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

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

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

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

    • VadimLjovkin
      /#24369024

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

      • CoderSafe
        /#24369114 / +1

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

        • VadimLjovkin
          /#24369432

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

  12. endpoints
    /#24369428 / +1

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

    • VadimLjovkin
      /#24369440

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

      • endpoints
        /#24370196

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

        • endpoints
          /#24370210

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

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

          • endpoints
            /#24370236

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

            • endpoints
              /#24370318

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

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

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

              • CoderSafe
                /#24370344 / +1

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

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

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

                • VadimLjovkin
                  /#24370764

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

                  "Проверочные файлы" - это простые текстовые файлы без расширения, с указанным в окне 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/

                • endpoints
                  /#24371168 / +1

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

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

                  • VadimLjovkin
                    /#24371614

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


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

          • VadimLjovkin
            /#24370794

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

  13. frkbvfnjh
    /#24369454 / -1

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

    • VadimLjovkin
      /#24369476 / +1

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

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

  14. 89Logic
    /#24374680

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

    • VadimLjovkin
      /#24374726

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

      • 89Logic
        /#24374730

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