Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Продление SSL-сертификата Let's Encrypt

    Продление SSL-сертификата Let's Encrypt

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Продление SSL-сертификата Let's Encrypt, RouterOS
     
    ColinSlater
    Guest
    #1
    0
    18.09.2022 08:56:00
    Привет! У меня есть RB4011 с ROS версии 7.5. Я воспользовался недавно добавленной поддержкой Let’s Encrypt / ACME, чтобы создать сертификат Let’s Encrypt, который используем для Hotspot и SSTP-VPN — всё работает отлично. Сертификаты Let’s Encrypt действуют 90 дней, поэтому для их обновления я написал такой скрипт:  
    /ip service enable [find name="www"];
    /certificate enable-ssl-certificate dns-name=[Моё DNS имя];
    /ip service disable [find name="www"];

    (Разумеется, в реальном скрипте MikroTik указан настоящий DNS для SSL-сертификата, здесь я его спрятал).  

    Причина использования первой и третьей строки — мне посоветовали отключать сервис www для самого файрвола из соображений безопасности. Мы администрируем файрвол через Winbox по локальной сети или VPN, так что это не создаёт проблем. Но для обновления сертификата Let’s Encrypt сервис должен быть включён, поэтому в скрипте я его активирую, а после завершения — отключаю.  

    Две проблемы:  
    1. Когда я вручную запускаю команду обновления в терминале, появляется сообщение "[success] ssl certificate updated", но срок действия сертификата в SYSTEM → Certificates не меняется.
    2. Скрипт, когда я запускаю его вручную, выполняется и заканчивается гораздо быстрее (меньше секунды), чем если вручную выполнять обновление сертификата в терминале (примерно 10-15 секунд). Возникает вопрос: действительно ли скрипт что-то делает или нужно добавить какие-то команды, чтобы дождаться завершения одного действия перед началом следующего?  

    Спасибо! Колин
     
     
     
    ColinSlater
    Guest
    #2
    0
    29.12.2022 07:58:00
    Доброе утро, сообщество Mikrotik! Я взял скрипт у rextended (огромное спасибо, http://forum.mikrotik.com/t/lets-encrypt-automatic-certificate-renewal/160816/1) и немного его подправил, как мне показалось нужным:

    - Включить правило в Firewall Filter, позволяющее порт 80 во входящих
    - Удалить старый сертификат
    - Запросить новый сертификат
    - Установить новый сертификат в конфигурацию SSTP сервера
    - Настроить новый сертификат в профиле Hotspot сервера
    - Отключить правило Firewall Filter для порта 80 во входящих

    Вот сам скрипт:

    ```
    :log info "Script - Certificate renewal start"

    :local commName "wifi.drumhill.co.uk"
    :local dnsName  "wifi.drumhill.co.uk"

    /ip firewall filter
    enable [find where comment="LetsEncrypt"]

    #Удалить старый сертификат, создать новый сертификат
    /certificate
    remove [find where common-name=$commName]
    enable-ssl-certificate dns=$dnsName

    #Задержка, чтобы запрос сертификата успел выполниться перед продолжением скрипта
    :delay 90s

    /certificate
    :local certName [get [find where common-name=$commName] name]

    #Установить новый сертификат в профиле SSTP
    /interface sstp-server server
    set certificate=$certName

    #Установить новый сертификат в профиле Hotspot
    /ip hotspot profile
    set [find where name=Hotspot] ssl-certificate=$certName

    /ip firewall filter
    disable [find where comment="LetsEncrypt"]
    ```

    Пункты с 1 по 4 работают отлично. Кажется, скрипт застревает на пункте 5. Думаю, дело в том, что я неправильно ссылаюсь на профиль Hotspot Server, куда хочу назначить сертификат — явно мой FIND WHERE не совсем корректен. Есть идеи, кто что посоветует?

    Спасибо, Колин
     
     
     
    ColinSlater
    Guest
    #3
    0
    21.12.2022 07:47:00
    Доброе утро, сообщество Mikrotik! Это старая тема, которую я начал давно. С тех пор я нашёл, кажется, действительно полезное видео на канале MikroTik в YouTube ( https://www.youtube.com/watch?v=T1Dyg4_caa4 ) о том, как использовать сертификаты Let’s Encrypt. Ближе к концу видео объясняется, что нужно сделать, чтобы встроенное автоматическое обновление сертификатов работало, и при этом порт 80 не был постоянно открыт в интернет… или, по крайней мере, я именно так понял.

    Моя конфигурация RB4011 (ROS7.6) (только нужные части) выглядит так:

    Я создал address-list, как описано в видео:
    /ip firewall address-list add address=acme-v02.api.letsencrypt.org list=LetsEncrypt
    /ip firewall address-list add address=acme-staging-v02.api.letsencrypt.org list=LetsEncrypt
    /ip firewall address-list add address=letsencrypt.org list=LetsEncrypt

    Я включил службу www: (странно, что в экспортированной конфигурации нет строки с этим, но Winbox показывает, что она включена, если смотреть в IP -> Services)

    Я создал правило firewall, чтобы принимать трафик на входящую цепочку от списка Let’s Encrypt:
    /ip firewall filter add action=accept chain=input comment=LetsEncrypt dst-port=80 protocol=tcp src-address-list=LetsEncrypt

    Для проверки, хотя у меня есть фиксированный публичный IP, я включил IP -> Cloud -> DDNS, чтобы получить там имя, а затем использовал команду из видео, чтобы создать сертификат let’s encrypt для автоматически сгенерированного доменного имени:
    /certificate enable-ssl-certificate

    Однако при этом я всегда получаю ошибку, что серверы Let’s Encrypt не могут связаться с моим роутером. Я вижу, что IP-адреса в списке, который я создал, обновляются динамически.

    Догадываюсь, что упускаю что-то очевидное, но не могу понять что именно.

    Буду благодарен за любую помощь.
     
     
     
    Sob
    Guest
    #4
    0
    21.12.2022 12:17:00
    Не уверен, что это должно работать, смотри: https://letsencrypt.org/docs/faq/#what-ip-addresses-does-let-s-encrypt-use-to-validate-my-web-server
     
     
     
    ColinSlater
    Guest
    #5
    0
    21.12.2022 16:47:00
    Привет! Вот почему в видео (на YouTube канале MikroTik) говорилось о том, чтобы добавить доменные имена в список адресов и настроить динамическое разрешение их через DNS. Спасибо, Колин.
     
     
     
    Sob
    Guest
    #6
    0
    21.12.2022 17:57:00
    Это не то, что я имел в виду. Во-первых, из трёх хостнеймов только один может иметь смысл — acme-v02.api.letsencrypt.org, к которому подключается LE-клиент; acme-staging-v02.api.letsencrypt.org — это тестовая (нерабочая) версия, а letsencrypt.org — просто публичный сайт. Но, насколько я понимаю (если кто-то меня поправит, буду благодарен), адреса серверов, которые проводят валидацию, специально не публикуются, то есть их не предполагается знать заранее. Когда я смотрел логи на сервере, где сегодня обновлялся сертификат, там были подключения с трёх разных адресов, и ни один из них не совпадал с тем, на что разрешается acme-v02.api.letsencrypt.org.
     
     
     
    ColinSlater
    Guest
    #7
    0
    22.12.2022 04:55:00
    Ох, понял. Ладно. Немного разочаровывает, но, видимо, это просто значит, что мне придётся снова использовать скрипт для продлений, если я хочу, чтобы они проходили автоматически. Спасибо за ответы.
     
     
     
    ColinSlater
    Guest
    #8
    0
    01.01.2023 09:16:00
    Исправил. В этой части скрипта:  
    set [find where name=Hotspot] ssl-certificate=$certName
    нужно было поменять на:  
    set ssl-certificate=$certName [find where name="Hotspot"]

    Полный скрипт теперь выглядит так:  

    :log info "Script - Certificate renewal start"  

    :local commName "xxx"  
    :local dnsName "xxx"  

    /ip firewall filter  
    enable [find where comment="LetsEncrypt"]

    # Удаляем старый сертификат, создаём новый  
    /certificate  
    remove [find where common-name=$commName]
    enable-ssl-certificate dns=$dnsName  

    # Лучше вставить здесь цикл, который проверяет готовность сертификата или таймаут через x секунд  
    :delay 45s  

    /certificate  
    :local certName [get [find where common-name=$commName] name]

    # Устанавливаем новый сертификат для SSTP профиля  
    /interface sstp-server server  
    set certificate=$certName  

    # Устанавливаем новый сертификат для профиля Hotspot  
    /ip hotspot profile  
    set ssl-certificate=$certName [find where name="Hotspot"]

    /ip firewall filter  
    disable [find where comment="LetsEncrypt"]

    Огромное спасибо Rextended за скрипт (ссылка есть выше в этой ветке).  
    Colin
     
     
     
    rextended
    Guest
    #9
    0
    02.01.2023 12:29:00
    Спасибо за упоминание. Наверное, за работу с Hotspot, потому что ты добавляешь " ", а не меняешь порядок. Еще пару советов:

    /interface ovpn-server server  
    set certificate=$certName

    /ip service  
    set www-ssl certificate=$certName  
    set api-ssl certificate=$certName

    /ip hotspot profile  
    set [find where !default] ssl-certificate=$certName
     
     
     
    ColinSlater
    Guest
    #10
    0
    03.02.2024 06:21:00
    Всем привет! Раньше это работало отлично… но теперь, похоже, перестало. Мой скрипт (ниже) обновляет сертификат let’s encrypt, который используется для моего SSTP VPN. Напомню, у меня RB4011 с ROS 7.12.1.

    Что я не понимаю — я по очереди запускал каждую строку скрипта (естественно, подставляя значения переменных вместо их имён) напрямую в терминале, и всё работает как надо, сертификат обновляется.

    Может, где-то проблема с правами?

    :log info "Script - Certificate renewal start"

    :local commName "[##CLOUD-DNS-NAME##]"

    /ip service enable [find where name=“www”]
    /ip firewall filter enable [find where comment="LetsEncrypt"]

    #Удаляем старый сертификат, создаём новый
    /certificate remove [find where common-name=$commName]
    /certificate enable-ssl-certificate dns=$commName

    :delay 60s

    /certificate :local certName [get [find where common-name=$commName] name]

    #Устанавливаем новый сертификат в профиль SSTP
    /interface sstp-server server set certificate=$certName

    /ip service disable [find where name=“www”]
    /ip firewall filter disable [find where comment="LetsEncrypt"]

    :log info "Script - Certificate renewal finished"

    Скрипт добавлен в роутер так:

    /system script add dont-require-permissions=no name=LetsEncryptRenewal owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon

    (Я опустил часть с source=, так как сам скрипт привёл выше).
     
     
     
    zedaz
    Guest
    #11
    0
    06.01.2025 12:53:00
    @ColinSlater, не мог бы ты, пожалуйста, выложить полное пошаговое решение?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры