<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Mikrotik.moscow [тема: Автоматическое обновление сертификата Let's Encrypt]</title>
		<link>http://mikrotik.moscow</link>
		<description>Новое в теме Автоматическое обновление сертификата Let's Encrypt форума RouterOS на сайте Mikrotik.moscow [mikrotik.moscow]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 07 May 2026 17:51:09 +0300</pubDate>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402673">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Использование значения days-valid здесь не подходит, это статичное значение — оно показывает срок действия сертификата, а не количество дней до его истечения. Вот мой скрипт для обновления по сроку действия, запускается ежедневно: если значение DAYS в окружении больше, чем “Expires After” сертификата, сертификат будет обновлён. ######## СКРИПТ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ LETSENCRYPT от L Hajek 08/2024 ###########<br /><br />##############################################<br />######## ОБЪЯСНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ ########<br />#<br /># DAYS — количество дней до обновления перед истечением сертификата<br /># MAILTO — адрес электронной почты для уведомлений о статусе обновления<br /># ERRSUBJECT — тема письма при ошибке обновления<br /># OKSUBJECT — тема письма при успешном обновлении<br /># DNSNAME — DNS-имена сертификата<br /># COMMONNAME — общее имя сертификата<br /># NEWVALUE — имя сертификата в RouterOS (необходимо для поиска сертификата!)<br /># LOGNAME — префикс для логов<br /># SVCALLOW — с каких адресов разрешён доступ к WWW сервису<br />#<br /># Для успешного обновления должен быть открыт порт 80 из любой точки интернета<br /># (например, у меня есть правило по имени LETSENCRYPT для временного доступа<br /># в процессе обновления. Также я использую ограниченный сервис www,<br /># который временно открывается отовсюду на время работы скрипта обновления)<br />##############################################<br /><br />### ПЕРЕМЕННЫЕ<br />:local days 20d;<br />:local mailto "example@domain.com";<br />:local errsubject "LE Certificate Renewall FAILED";<br />:local oksubject "LE Certificate Renewall SUCCESS";<br />:local dnsName "router.domain.com,host.domain.com,host2.domain2.com";<br />:local commonName "router.domain.com";<br />:local newvalue "letsencrypt-cert";<br />:local logname "LETSENCRYPT";<br />:local svcallow "10.0.0.0/8,127.0.0.1";<br /><br />### ПРОВЕРКА<br />/certificate<br />:foreach item in=[find where common-name=rtr.lha-net.cz] do={<br /> &nbsp; &nbsp;:if (([get $item expires-after] &lt; $days) and ![get $item expired]) do={<br />		:log info "$logname - Открываю порты в файрволе"<br />		/ip firewall/filter/enable [find comment=LETSENCRYPT]<br />		/ip service/set www address=""<br />		:delay 5s<br />		:log info "$logname - Запускаю обновление сертификата"<br />		:set $newvalue [/certificate enable-ssl-certificate dns-name=$dnsName as-value]<br />		:delay 60s<br />		:log info "$logname - Завершаю процесс обновления"<br />		:log info "$logname - Статус обновления сертификата: $[:tostr $newvalue]"<br />		/ip service/set www address="$svcallow"<br />		/ip firewall/filter/disable [find comment=LETSENCRYPT]<br />		:delay 10s<br />#		/certificate/remove [find where name~"letsencry*"]<br />		/certificate/remove [find where name="$newvalue"]<br />		:delay 10s<br />		/certificate/set [find where name~"autogen*"] name=$newvalue<br />		:delay 10s<br />		/interface/sstp-server/server/set certificate=letsencrypt-cert<br />		/ip/hotspot/profile/set hsprof1 ssl-certificate=letsencrypt-cert<br />		/ip service/set api-ssl certificate=letsencrypt-cert<br />		/ip service/set www-ssl certificate=letsencrypt-cert<br /><br />	:if ([:typeof [:find [:tostr $newvalue] "[error]"]]="nil") do={<br />		:log info "$logname - Обновление сертификата УСПЕШНО"<br />		/tool e-mail send to="$mailto" subject=([/system identity get name]. ".   $oksubject. ");<br />		<br />	} else={<br />		:log error "$logname - Обновление сертификата НЕ УДАЛОСЬ"<br />		/tool e-mail send to="$mailto" subject=([/system identity get name]. ".   $errsubject. ");<br />			}<br />	} else={<br />		:log info "$logname - Сертификат действителен — НИЧЕГО ДЕЛАТЬ НЕ НУЖНО"<br />		}<br />} <br />
			<i>02.08.2024 14:31:00, itallko2010.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402673</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402673</guid>
			<pubDate>Fri, 02 Aug 2024 14:31:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402672">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Я использовал ваш код на платформе X86. Он работает для создания сертификата, но не удаётся обновить сертификат, даже если до его истечения осталось меньше 30 дней. Я нашёл, что в коде есть такой фрагмент: &nbsp;<br />if ( ([/certificate/print count-only where common-name =$dnsName] = 0 ) || ( ([/certificate/print count-only where common-name=$dnsName] &gt; 0) && ([/certificate/get value-name=days-valid [find common-name=$dnsName]] &lt;  $Daysbefore) ) ) do={  <br />возможно, он неправильный. Я проверил, что именно “[/certificate/get value-name=days-valid [find common-name=$dnsName]” является корнем проблемы. Он не может получить значение days-valid. Поэтому скрипт никогда не заходит в процесс обновления.  <br /><br />Я переписал это в следующую версию: &nbsp;<br />if ( ([/certificate/print count-only where common-name =$dnsName] = 0 ) || ( ([/certificate/print count-only where common-name=$dnsName] &gt; 0) && ([/certificate get [find common-name=$dnsName] days-valid] &lt;  $Daysbefore) ) ) do={  <br /><br />Теперь он корректно считывает days-valid, что подтверждаю выводом в лог: &nbsp;<br />log info [/certificate get [find common-name=$dnsName] days-valid]  <br /><br />Пожалуйста, сообщите, если я что-то неправильно понял. <br />
			<i>22.11.2023 16:14:00, edmond25.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402672</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402672</guid>
			<pubDate>Wed, 22 Nov 2023 16:14:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402671">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Добрый день! Я не программист. Этот скрипт у меня работает на CCR2004 с ROS 7.8. Если вам не трудно, пожалуйста, укажите на ошибки. Большое спасибо! <br />
			<i>21.04.2023 12:17:00, ivanforreg2015.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402671</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402671</guid>
			<pubDate>Fri, 21 Apr 2023 12:17:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402670">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Извините, но там ВСЁ ЕЩЁ полно ошибок… <br />
			<i>20.04.2023 11:26:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402670</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402670</guid>
			<pubDate>Thu, 20 Apr 2023 11:26:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402669">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Добрый день. Строка кода: if ( [/certificate enable-ssl-certificate dns-name=$dnsName] = 0 ) do={ ... } else={ :log info "[Letsencrypt_OSScript] - Nothing to do!" } всегда возвращает ненулевое значение. Я переписал эту часть скрипта. Возможно, кому-то будет полезно. #script name  <br />:local scrname "scr-LetsEncrypt-vpn-sampledomain"<br /><br />:local Daysbefore 30 &nbsp;<br />:local dnsName "vpn.sampledomain.com"<br /><br />#cert name &nbsp;<br />:local certName "crt-vpn-le"<br /><br />:local array [ :toarray "" ]  <br />:local newvalue ""<br /><br />:if ( ([/certificate/print count-only where common-name =$dnsName] = 0 ) || ( ([/certificate/print count-only where common-name=$dnsName] &gt; 0) && ([/certificate/get value-name=days-valid [find common-name=$dnsName]] &lt; $Daysbefore) ) ) do={<br /><br />	:log info "$scrname - Пытаюсь открыть порт в файрволе и включить сервис" &nbsp;<br />	/ip firewall/filter/add chain=input dst-port=80 protocol=tcp action=accept place-before=0 comment=$scrname &nbsp;<br />	/ip service enable [find port=80]<br /><br />	:log info "$scrname - Запускаю процесс обновления сертификата" &nbsp;<br />	:set $newvalue [/certificate enable-ssl-certificate dns-name=$dnsName as-value]  <br />	:log info "$scrname - Останавливаю процесс обновления сертификата" &nbsp;<br />	:delay 20000ms &nbsp;<br />	:log info "$scrname - Сообщение об обновлении сертификата: $[:tostr $newvalue]"<br /><br />	:if ([:typeof [:find [:tostr $newvalue] "[error]"]]="nil") do={  <br />		:log info "$scrname - Сертификат обновлён - Закрываю двери"<br />		<br />		#Опциональный код. Можно удалить. НАЧАЛО &nbsp;<br />		#Здесь я переименовываю полученный сертификат, так как у меня используется двойной WAN и два разных сертификата для ipsec RoadWarriors.<br /><br />		:set $newvalue [/certificate/get value-name=name [find name~$certName]]  <br />		/certificate remove [find name~$certName]  <br />		:log info "$scrname - Сертификат $newvalue удалён"<br /><br />		:local dttm [:tostr [/system clock get date]]  <br />		:set newvalue ( $newvalue . [:pick $dttm 0 3] . [:pick $dttm 4 6] . [:pick $dttm 7 11] . "-")  <br />		:set $dttm [:tostr [/system clock get time]]  <br />		:set newvalue ( $newvalue . [:pick $dttm 0 2] . [:pick $dttm 3 5] . [:pick $dttm 6 8])  <br />		:set newvalue ( $certName . "-" . $newvalue )<br /><br />		/certificate set name=$newvalue [find name~"letsencrypt-autogen"]  <br />		:log info "$scrname - Сертификат переименован в $newvalue"<br /><br />		##### &nbsp;<br />		:set newvalue [/certificate get [/certificate find where common-name=$dnsName] name ]  <br />		:set $array ( $array, $newvalue ); &nbsp;<br />		# :put [:tostr $array]<br /><br />		#R3 - это LetsEncrypt R3 для моих RoadWarriors &nbsp;<br />		:set $newvalue [/certificate get [/certificate find where common-name="R3"] name ]  <br />		# :put $newvalue &nbsp;<br />		:set $array ( $array, $newvalue ); &nbsp;<br />		# :put [:tostr $array]  <br />		/ip/ipsec/identity set [/ip/ipsec/identity find where comment="RoadWarriors"] certificate=$array  <br />		:log info "$scrname - array: $[:tostr $array]"  <br />		#####<br /><br />		#Опциональный код. Можно удалить. КОНЕЦ<br />		<br />	} else={ &nbsp;<br />		:log error "$scrname - Не удалось сгенерировать сертификат - Закрываю двери" &nbsp;<br />	}<br /><br />	:log info "$scrname - Удаляю кастомное правило файрвола и отключаю сервисы" &nbsp;<br />	/ip firewall/filter/remove [find comment=$scrname]  <br />	/ip service disable [find port=80]<br /><br />} else={ &nbsp;<br />	:log info "$scrname - Действовать не нужно!" &nbsp;<br />} <br />
			<i>20.04.2023 10:00:00, ivanforreg2015.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402669</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402669</guid>
			<pubDate>Thu, 20 Apr 2023 10:00:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402668">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Скрипт полный ошибок. Вместо этого почитайте руководства и посмотрите видео. <noindex><a href="https://help.mikrotik.com/docs/display/ROS/Certificates#Certificates-Let’sEncryptcertificates" target="_blank" rel="nofollow" >https://help.mikrotik.com/docs/display/ROS/Certificates#Certificates-Let’sEncryptcertificates</a></noindex> <br />
			<i>14.04.2023 15:09:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402668</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402668</guid>
			<pubDate>Fri, 14 Apr 2023 15:09:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402667">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Добрый день, Mauro! Помоги, пожалуйста. Я запускаю твой скрипт: <noindex><a href="https://github.com/pincioc/LetsEncrypt_OSScript/issues/new" target="_blank" rel="nofollow" >https://github.com/pincioc/LetsEncrypt_OSScript/issues/new</a></noindex> &nbsp;<br />Строка кода: &nbsp;<br />if ( [/certificate enable-ssl-certificate dns-name=$dnsName] = 0 ) do={ ... } else={ :log info "[Letsencrypt_OSScript] - Nothing to do!" }  <br />Всегда возвращает ненулевой результат. Каждый раз, когда я запускаю скрипт, получаю в логе сообщение «[Letsencrypt_OSScript] - Nothing to do!», хотя сертификат всё равно обновляется! Я не могу найти документацию о том, какой тип данных должна возвращать команда [/certificate enable-ssl-certificate dns-name=$dnsName]. Пожалуйста, поделись информацией о возвращаемом типе данных для функции [/certificate enable-ssl-certificate dns-name=$dnsName]. Большое спасибо! <br />
			<i>14.04.2023 09:20:00, ivanforreg2015.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402667</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402667</guid>
			<pubDate>Fri, 14 Apr 2023 09:20:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402666">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			спасибо, «rextended», очень понятный скрипт. Я протестировал этот скрипт и добавил функцию SSTP. У меня всё отлично работает. log info "Script - Certificate renewal start"<br /><br />:local commName "ваше доменное имя (Common Name)"<br />:local dnsName "ваше доменное имя (Domain Name)"<br /><br />/ip service<br />set www disabled=no<br /><br />/ip firewall filter<br />enable [find where comment="IP Services HTTP"]<br /><br />/certificate<br />remove [find where common-name=$commName]<br />enable-ssl-certificate dns=$dnsName<br /><br /># лучше сюда вставить цикл, который будет проверять, когда сертификат готов, или таймаут через x секунд<br />:delay 30s<br /><br />/certificate<br />:local certName [get [find where common-name=$commName] name]<br /><br />:log info "Script - Certificate renewal | обновление сертификата UM"<br />/user-manager<br />set certificate=$certName<br />:log info "Script - Certificate renewal | обновление сертификата UM выполнено!"<br /><br />:log info "Script - Certificate renewal | обновление сертификата WIFI EAP"<br />/interface wireless security-profiles<br />set [find where name="EAP"] tls-certificate=$certName<br />:log info "Script - Certificate renewal | обновление сертификата WIFI EAP выполнено!"<br /><br />:log info "Script - Certificate renewal | обновление сертификата IP Services"<br />/ip service<br />set www-ssl certificate=$certName<br />:log info "Script - Certificate renewal | обновление сертификата IP Services выполнено!"<br /><br />:log info "Script - Certificate renewal | обновление сертификата SSTP Server"<br />/interface sstp-server server<br />set certificate=$certName<br />:log info "Script - Certificate renewal | обновление сертификата SSTP Server выполнено!"<br /><br />/ip service<br />set www disabled=yes<br /><br />/ip firewall filter<br />disable [find where comment="IP Services HTTP"]<br /><br />:log info "Script - Certificate renewal end" <br />
			<i>08.11.2022 09:32:00, securenss.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402666</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402666</guid>
			<pubDate>Tue, 08 Nov 2022 09:32:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402665">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Если вам будет полезно, я написал скрипт для автоматического продления, вы можете найти его по ссылке <noindex><a href="https://github.com/pincioc/LetsEncrypt_OSScript" target="_blank" rel="nofollow" >https://github.com/pincioc/LetsEncrypt_OSScript</a></noindex>. Буду очень благодарен за оценки и комментарии. Мауро <br />
			<i>01.12.2022 14:15:00, pincio.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402665</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402665</guid>
			<pubDate>Thu, 01 Dec 2022 14:15:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Автоматическое обновление сертификата Let's Encrypt</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402664">Автоматическое обновление сертификата Let's Encrypt</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет! Известна ли какая-то причина, почему мой сертификат не обновляется автоматически? WWW включён, и правило фаервола, как мне кажется, настроено правильно. <br />
			<i>15.09.2022 09:00:00, own3r1138.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402664</link>
			<guid>http://mikrotik.moscow/forum/forum57/86052-avtomaticheskoe-obnovlenie-sertifikata-let_s-encrypt/message402664</guid>
			<pubDate>Thu, 15 Sep 2022 09:00:00 +0300</pubDate>
			<category>RouterOS</category>
		</item>
	</channel>
</rss>
