Compare commits

..

39 commits

Author SHA1 Message Date
Christian Hesse
88155d901a Merge branch 'builtin-trust-store' into next 2025-11-10 12:16:22 +01:00
Christian Hesse
fd9c892a50 README: add a line break before command 2025-11-10 12:16:22 +01:00
Christian Hesse
a7876e9833 doc/mod/notification-matrix: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
8a45e4836a fw-addr-lists.d/allow: use rsc.eworm.de in the list 2025-11-10 12:16:22 +01:00
Christian Hesse
617f67f2b7 CERTIFICATES: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
4b5a3f7f90 fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de 2025-11-10 12:16:22 +01:00
Christian Hesse
3be8ea0fb6 update-tunnelbroker: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
780a177ae6 Makefile: clean up and add phony targets 2025-11-10 12:16:22 +01:00
Christian Hesse
1272eb2aa8 telegram-chat: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
c08ed68e86 global-functions: $ScriptInstallUpdate: extra actions on 'not found' only 2025-11-10 12:16:22 +01:00
Christian Hesse
d2ea8b8d45 netwatch-dns: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
128526536e global-functions: $ScriptInstallUpdate: either or...
... but not both.
2025-11-10 12:16:22 +01:00
Christian Hesse
089f95d5c9 mod/notification-telegram: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
4ac9d6c09f global-functions: $ScriptInstallUpdate: give hint on ignore
Fixes: https://github.com/eworm-de/routeros-scripts/issues/112
2025-11-10 12:16:22 +01:00
Christian Hesse
90ce3db2f9 mod/notification-ntfy: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
b9a72ef9c0 contrib/checksums.sh: output to stdout...
... and let the Makefile redirect.
2025-11-10 12:16:22 +01:00
Christian Hesse
62deb6aae3 fw-addr-lists: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
a57abbc685 Merge branch 'contrib' into next 2025-11-10 12:16:22 +01:00
Christian Hesse
ec2401b5c3 check-certificates: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
ee06798d8b global-functions: $CertificateDownload: drop unused function 2025-11-10 12:16:22 +01:00
Christian Hesse
96f61be2e2 contrib/notification: format the values italic 2025-11-10 12:16:22 +01:00
Christian Hesse
268b8b6abe global-functions: $ScriptInstallUpdate: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
4102b49637 contrib/notification: update date format 2025-11-10 12:16:22 +01:00
Christian Hesse
dd019a71c8 global-functions: $GetMacVendor: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
ebd84d1540 contrib/{logo-color,notification}: add navigation structure 2025-11-10 12:16:22 +01:00
Christian Hesse
d845b1878b global-functions: $DownloadPackage: define certificate use 2025-11-10 12:16:22 +01:00
Christian Hesse
8a278569e7 contrib/*: unify html code 2025-11-10 12:16:22 +01:00
Christian Hesse
d2f055a554 global-functions: $CertificateAvailable: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-10 12:16:22 +01:00
Christian Hesse
9a88b6c878 contrib/html.sh: drop comman from id/anchor 2025-11-10 12:16:22 +01:00
Christian Hesse
4e1db10a6e INITIAL-COMMANDS: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-10 12:16:22 +01:00
Christian Hesse
4f55808ce0 contrib/html.sh: properly handle anchors 2025-11-10 12:16:22 +01:00
Christian Hesse
962b082672 README: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-10 12:16:22 +01:00
Christian Hesse
6887d816bf contrib/html.sh: link the logo with relative path 2025-11-10 12:16:22 +01:00
Christian Hesse
787feedbb5 contrib/html.sh: increase default line height 2025-11-10 12:16:22 +01:00
Christian Hesse
12b1572208 contrib/html.sh: add a margin on left and right...
... for windows in landscape (wider than high).
2025-11-10 12:16:22 +01:00
Christian Hesse
0af5d516a3 contrib/html.sh: link the stylesheet from top level...
... and copy it there in Makefile.
2025-11-10 12:16:22 +01:00
Christian Hesse
ec8a38d67b contrib/html.sh: include stylesheet via link 2025-11-10 12:16:22 +01:00
Christian Hesse
5726573933 contrib/{logo-color,notification}: use a single style 2025-11-10 12:16:22 +01:00
Christian Hesse
3776a028f8 check-certificates: add missing semicolon 2025-11-10 12:15:08 +01:00
13 changed files with 37 additions and 24 deletions

View file

@ -61,7 +61,7 @@ Import a certificate by CommonName
Running the function `$CertificateAvailable` with that name as parameter Running the function `$CertificateAvailable` with that name as parameter
makes sure the certificate is available in the device's store: makes sure the certificate is available in the device's store:
$CertificateAvailable "ISRG Root X2"; $CertificateAvailable "ISRG Root X2" "fetch";
If the certificate is actually available already nothing happens, and there If the certificate is actually available already nothing happens, and there
is no output. Otherwise the certificate is downloaded and imported. is no output. Otherwise the certificate is downloaded and imported.

View file

@ -22,8 +22,11 @@ Run the complete base installation:
:local CertFileName "ISRG-Root-X2.pem"; :local CertFileName "ISRG-Root-X2.pem";
:local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470";
:if (!(([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ :local CertSettings [ /certificate/settings/get ];
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={ :if (!((($CertSettings->"builtin-trust-anchors") = "trusted" || \
($CertSettings->"builtin-trust-store") ~ "fetch" || \
($CertSettings->"builtin-trust-store") = "all") && \
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={
:put "Importing certificate..."; :put "Importing certificate...";
/tool/fetch ($BaseUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value; /tool/fetch ($BaseUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value;
:delay 1s; :delay 1s;

View file

@ -77,8 +77,11 @@ download the certificates.
> 💡️ **Hint**: RouterOS 7.19 comes with a builtin certificate store. You > 💡️ **Hint**: RouterOS 7.19 comes with a builtin certificate store. You
> can skip the steps regarding certificate download and import and jump > can skip the steps regarding certificate download and import and jump
> to [installation of scripts](#installation-of-scripts) if you set the > to [installation of scripts](#installation-of-scripts) if you set the
> trust for these builtin trust anchors: > trust for these builtin trust anchors:
> `/certificate/settings/set builtin-trust-anchors=trusted;` > `/certificate/settings/set builtin-trust-anchors=trusted;`
> With RouterOS 7.21 the functionality was changed. Set this at minimum,
> but make sure not to drop other targets:
> `/certificate/settings/set builtin-trust-store=fetch;`
If you intend to download the scripts from a If you intend to download the scripts from a
different location (for example from github.com) install the corresponding different location (for example from github.com) install the corresponding
@ -173,7 +176,7 @@ This last step is required when ever you make changes to your configuration.
> **Info**: It is recommended to edit the configuration using the command > **Info**: It is recommended to edit the configuration using the command
> line interface. If using Winbox on Windows OS, the line endings may be > line interface. If using Winbox on Windows OS, the line endings may be
> missing. To fix this run: > missing. To fix this run:
> `/system/script/set source=[ :tocrlf [ get global-config-overlay source ] ] global-config-overlay;` > `/system/script/set source=[ :tocrlf [ get global-config-overlay source ] ] global-config-overlay;`
Updating scripts Updating scripts

View file

@ -21,7 +21,7 @@
:global CertWarnTime; :global CertWarnTime;
:global Identity; :global Identity;
:global CertificateAvailable :global CertificateAvailable;
:global EscapeForRegEx; :global EscapeForRegEx;
:global IfThenElse; :global IfThenElse;
:global LogPrint; :global LogPrint;
@ -189,7 +189,7 @@
fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ]; fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ];
:local CertNewVal [ /certificate/get $CertNew ]; :local CertNewVal [ /certificate/get $CertNew ];
:if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") ] = false) do={ :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") "fetch" ] = false) do={
$LogPrint warning $ScriptName ("The certificate chain is not available!"); $LogPrint warning $ScriptName ("The certificate chain is not available!");
} }

View file

@ -1,8 +1,9 @@
/* stylesheet for RouterOS Scripts */ /* stylesheet for RouterOS Scripts */
body { body {
background-color: transparent;
font-family: fira-sans, sans-serif; font-family: fira-sans, sans-serif;
font-size: 10pt; font-size: 10pt;
background-color: transparent; line-height: 1.6;
} }
@media only screen and (orientation: landscape) { @media only screen and (orientation: landscape) {
body { body {

View file

@ -49,7 +49,7 @@ your server in device's certificate store.
The example below is for `matrix.org`, which uses a trust chain from *Google The example below is for `matrix.org`, which uses a trust chain from *Google
Trust Services*. Run this to import the required certificate: Trust Services*. Run this to import the required certificate:
$CertificateAvailable "GTS Root R4"; $CertificateAvailable "GTS Root R4" "fetch";
Replace the CA certificate name with what ever is needed for your server. Replace the CA certificate name with what ever is needed for your server.
You may want to find the You may want to find the

View file

@ -74,7 +74,7 @@
:if ([ :len ($List->"cert") ] > 0) do={ :if ([ :len ($List->"cert") ] > 0) do={
:set CheckCertificate true; :set CheckCertificate true;
:if ([ $CertificateAvailable ($List->"cert") ] = false) do={ :if ([ $CertificateAvailable ($List->"cert") "fetch" ] = false) do={
$LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \ $LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \
" / " . $List->"url" . ") failed, trying anyway."); " / " . $List->"url" . ") failed, trying anyway.");
} }

View file

@ -106,11 +106,15 @@
# check and download required certificate # check and download required certificate
:set CertificateAvailable do={ :set CertificateAvailable do={
:local CommonName [ :tostr $1 ]; :local CommonName [ :tostr $1 ];
:local UseFor [ :tostr $2 ];
:global CertificateDownload; :global CertificateDownload;
:global EitherOr;
:global LogPrint; :global LogPrint;
:global ParseKeyValueStore; :global ParseKeyValueStore;
:set UseFor [ $EitherOr $UseFor "undefined" ];
:if ([ /system/resource/get free-hdd-space ] < 8388608 && \ :if ([ /system/resource/get free-hdd-space ] < 8388608 && \
[ /certificate/settings/get crl-download ] = true && \ [ /certificate/settings/get crl-download ] = true && \
[ /certificate/settings/get crl-store ] = "system") do={ [ /certificate/settings/get crl-store ] = "system") do={
@ -123,7 +127,10 @@
:return false; :return false;
} }
:if (([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ :local CertSettings [ /certificate/settings/get ];
:if ((($CertSettings->"builtin-trust-anchors") = "trusted" || \
($CertSettings->"builtin-trust-store") ~ $UseFor || \
($CertSettings->"builtin-trust-store") = "all") && \
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={ [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={
:return true; :return true;
} }
@ -161,7 +168,6 @@
:global ScriptUpdatesBaseUrl; :global ScriptUpdatesBaseUrl;
:global ScriptUpdatesUrlSuffix; :global ScriptUpdatesUrlSuffix;
:global CertificateAvailable;
:global CertificateNameByCN; :global CertificateNameByCN;
:global CleanName; :global CleanName;
:global FetchUserAgentStr; :global FetchUserAgentStr;
@ -398,7 +404,7 @@
:return true; :return true;
} }
:if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={
$LogPrint error $0 ("Downloading required certificate failed."); $LogPrint error $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -634,7 +640,7 @@
} }
:do { :do {
:if ([ $CertificateAvailable "GTS Root R4" ] = false) do={ :if ([ $CertificateAvailable "GTS Root R4" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }
@ -1242,7 +1248,7 @@
:global SymbolForNotification; :global SymbolForNotification;
:global ValidateSyntax; :global ValidateSyntax;
:if ([ $CertificateAvailable "ISRG Root X2" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading certificate failed, trying without."); $LogPrint warning $0 ("Downloading certificate failed, trying without.");
} }
@ -1293,7 +1299,7 @@
} }
:if ([ :len ($ScriptInfo->"certificate") ] > 0) do={ :if ([ :len ($ScriptInfo->"certificate") ] > 0) do={
:if ([ $CertificateAvailable ($ScriptInfo->"certificate") ] = false) do={ :if ([ $CertificateAvailable ($ScriptInfo->"certificate") "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading certificate failed, trying without."); $LogPrint warning $0 ("Downloading certificate failed, trying without.");
} }
} }

View file

@ -109,7 +109,7 @@
:onerror Err { :onerror Err {
:if ($Server = "ntfy.sh") do={ :if ($Server = "ntfy.sh") do={
:if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }

View file

@ -30,7 +30,7 @@
:return false; :return false;
} }
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -72,7 +72,7 @@
:global CertificateAvailable; :global CertificateAvailable;
:global LogPrint; :global LogPrint;
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -197,7 +197,7 @@
"&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \ "&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \
"&disable_web_page_preview=true&parse_mode=MarkdownV2"); "&disable_web_page_preview=true&parse_mode=MarkdownV2");
:onerror Err { :onerror Err {
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }

View file

@ -112,7 +112,7 @@
:foreach DohServer in=$DohServers do={ :foreach DohServer in=$DohServers do={
:if ([ :len ($DohServer->"doh-cert") ] > 0) do={ :if ([ :len ($DohServer->"doh-cert") ] > 0) do={
:if ([ $CertificateAvailable ($DohServer->"doh-cert") ] = false) do={ :if ([ $CertificateAvailable ($DohServer->"doh-cert") "dns" ] = false) do={
$LogPrint warning $ScriptName ("Downloading certificate failed, trying without."); $LogPrint warning $ScriptName ("Downloading certificate failed, trying without.");
} }
} }

View file

@ -61,7 +61,7 @@
:set TelegramRandomDelay 0; :set TelegramRandomDelay 0;
} }
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $ScriptName ("Downloading required certificate failed."); $LogPrint warning $ScriptName ("Downloading required certificate failed.");
:set ExitOK true; :set ExitOK true;
:error false; :error false;

View file

@ -28,7 +28,7 @@
:error false; :error false;
} }
:if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint error $ScriptName ("Downloading required certificate failed."); $LogPrint error $ScriptName ("Downloading required certificate failed.");
:set ExitOK true; :set ExitOK true;
:error false; :error false;