Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
Utilisez nsupdate avec son serveur DNS pour créer et mettre à jours des certificats SSL/TLS Let's Encrypt
NdM : 2023/07/09 - Mise à jour (ajout d'information et 2 scripts en fin d'article).
NdM : 2023/08/08 - Modification du script pour vérfier la validité de nos certificats SSL et exemple de mise à jour des champs d'enregistrement TLSA (DANE).
NdM : 2023/09/20 : Modification des scripts "acme-certif-date_verification.bash
" et "acme-certif-frontend.bash
"
NdM : 2023/12/14 : Modification du script "acme-certif-date_verification.bash
" pour qu'il "nsupdate
" les nouvelles valeurs TLSA du protocole HTTPS sur un serveur DNS.
NdM : 2023/12/22 : Modification du script "acme-certif-date_verification.bash
" pour qu'il "nsupdate
" les nouvelles valeurs TLSA du protocole SMTPS sur un serveur DNS.
NdM : 2024/05/09 : Modification du script "acme-certif-date_verification.bash
" pour qu'il "SCP
" et UPDATE/DEPLOY le nouveau certificats Let's Encrypt dans Zimbra mail serveur.
Je vais vous expliquer comment créer des certificats SSL/TLS Let's Encrypt en utilisant votre serveur DNS pour créer/valider et mettre à jour vos certificats internationalement.
Let's Encrypt est une autorité de certification qui fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisé.
Pré-requis : un serveur DNS authoritaire que vous administrez ; où nous allons activer le moyen de faire des mise à jour dynamique (si cela n'est pas déjà fait).
nsupdate
pour mettre à jour dynamiquement mon server DNS, lors de la création et des mises à jours des certificats.
nsupdate
permet de mettre à jour des "zones" DNS sur votre serveur autoritaire.
acme.sh
permet de créer des certificats SSL/TLS, et permet de mettre à jour vos certificats sur l'AC (l'Authorité de Certifications) Let's Encrypt pour que vos certifats SSL/TLS restent valident dans le monde entier.
acme.sh
un des utilitaires de Let's Encrypt
Je choisis d'installer acme.sh
sur mon container "web" (je vous dis pourquoi, bientôt).
Pour l'installation c'est simple :
Script avec 10 lignes
001root@web:~ # git clone https://github.com/acmesh-official/acme.sh.git 002cd acme.sh 003./acme.sh --install \ 004--home ~/acme \ 005--config-home ~/acme/data \ 006--cert-home ~/acme/mycerts \ 007--accountemail "admin@mydomain.tld" \ 008--accountkey ~/acme/myaccount.key \ 009--accountconf ~/acme/myaccount.conf \ 010--useragent "Mozilla/5.0 (compatible; Linux 4.19.0-8-amd64; x86_64) MYACME.Bot/YOUR-CREW (20221002)."
Les options de configuration d'installation sous les suivantes :
--home
est un répertoire personnalisé dans lequel installer acme.sh. Par défaut, il s'installe dans ~/.acme.sh
--config-home
est un dossier inscriptible, acme.sh y écrira tous les fichiers (y compris cert/keys, configs). Par défaut, c'est dans --home
--cert-home
est un répertoire personnalisé pour enregistrer les certificats que vous émettez. Par défaut, il est enregistré dans --config-home
.--accountemail
est l'e-mail utilisé pour enregistrer un compte sur Let's Encrypt, vous recevrez un e-mail d'avis de renouvellement ici.--accountkey
est le fichier qui enregistre la clé privée de votre compte. Par défaut, il est enregistré dans --config-home
.--user-agent
est la valeur d'en-tête de l'agent utilisateur utilisée pour envoyer à Let's Encrypt.--nocron
installer acme.sh
sans cronjob
Qui me crée dans mon répertoire /root
le répertoire acme/
Script avec 12 lignes
001root@web:~ # ls -la acme/ 002total 260 003drwx------ 6 root root 4096 juin 10 00:20 . 004drwx------ 15 root root 12288 juin 26 16:05 .. 005-rwxr-xr-x 1 root root 220762 juin 10 00:20 acme.sh 006-rw-r--r-- 1 root root 142 nov. 27 2022 acme.sh.env 007drwx------ 26 root root 4096 juin 17 15:46 data 008drwxr-xr-x 2 root root 4096 juin 10 00:20 deploy 009drwxr-xr-x 2 root root 4096 juin 10 00:20 dnsapi 010-rw-r--r-- 1 root root 591 juin 26 00:51 myaccount.conf 011-rw------- 1 root root 1675 nov. 27 2022 myaccount.key 012drwxr-xr-x 2 root root 4096 juin 10 00:20 notify
Ci-dessous le contenu du fichier /root/acme/myaccount.conf
Script avec 16 lignes
001LOG_FILE="/root/acme/data/acme.sh.log" 002LOG_LEVEL=1 003 004AUTO_UPGRADE='1' 005 006#NO_TIMESTAMP=1 007 008ACCOUNT_KEY_PATH='/root/acme/myaccount.key' 009ACCOUNT_EMAIL='admin+acme@mydomain.tld' 010UPGRADE_HASH='b7caf7a0165yuaeiyaeuicfksmlka06bb32025066d' 011USER_AGENT='Mozilla/5.0 (compatible; Linux 4.19.0-8-amd64; x86_64) MYACME.Bot/ZW3B (20221127).' 012SAVED_NSUPDATE_SERVER='dns.ipv10.net' 013SAVED_NSUPDATE_SERVER_PORT='' 014SAVED_NSUPDATE_KEY='/root/nsupdate/Knsupdate-key-zone.+157+09852.private' 015SAVED_NSUPDATE_ZONE='' 016USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/local/openldap/bin'
Avant de pouvoir créer un certificat, il faut configurer "une" zone de notre serveur DNS pour qu'il accepte les mises à jour dynamique - si vous ne connaissez pas vous allez aimer.
J'ajoute la ligne de la tâche planifiée (que j'ai transformé -- j'ai ajouté "une attente (sleep
) avec un nombre (-n1
) aléatoire (shuf
fle) entre 0
et une heure (3600
sec)" à minuit heure locale, pour ne pas surcharger les serveurs Let's Encrypt tous les jours à la même seconde).
Script avec 3 lignes
001root@web:~ # crontab -l 002[....] 00300 00 * * * sleep $(shuf -i 0-3600 -n1) ; "/root/acme"/acme.sh --cron --home "/root/acme" --config-home "/root/acme/data" > /dev/null
nsupdate
Dans le fichier name.conf.local
ajouter à une zone l'option allow-update
avec la clef tsig
:
Par exemple : /etc/bind/named.conf.local
Script avec 12 lignes
001[...] 002 zone "example.com" { 003 type master; 004# file "/etc/bind/masters/example.com.hosts"; 005 file "/etc/bind/masters/example.com.hosts.signed"; 006 007 allow-transfer { key "ns-ldap"; }; 008 allow-update { key "nsupdate-key-zone"; }; 009 010 notify yes; 011 }; 012[...]
Pour créer la clef tsig
de mise à jour dynamique :
Depuis le serveur DNS dans le répertoire correspondant à l'emplacement de clefs key-directory
que nous avons configué dans les "options" du fichier /etc/bind/named.conf.options
:
Script avec 1 ligne
001root@dns:/etc/bind/keys # tsig-keygen -a hmac-sha512 nsupdate-key-zone
Il faut passer les clefs à l'utilisateur "bind".
Qui nous créait 2 fichiers :
Script avec 3 lignes
001root@dns:/etc/bind/keys # ls -l Knsupdate-key-zone.+157+09852.* 002-rw-r--r-- 1 bind bind 123 nov. 17 2022 Knsupdate-key-zone.+157+09852.key 003-rw------- 1 bind bind 229 nov. 17 2022 Knsupdate-key-zone.+157+09852.private
Maintenant il faut envoyer sur le serveur Web la clef pour pouvoir utiliser nsupdate
depuis notre serveur Web.
J'oubliais, il faut autoriser le serveur Web à faire des mises à jour. Pour cela, dans un des fichiers de "bind" ajouter :
Par exemple dans /etc/bind/named.conf
:
Script avec 7 lignes
001[...] 002# WEB.SERVER (IPv6) 003server 2607:5300:60:9389:15:1:a:10 { 004 transfer-format many-answers; 005 keys { "nsupdate-key-zone"; }; 006}; 007[...]
Pour transférer la clef dans le répertoire nsupdate/
de l'utilisateur "root" du serveur "web" vous pouvez utiliser la commande :
Script avec 1 ligne
001root@dns:/etc/bind/keys # scp /etc/bind/keys/Knsupdate-key-zone.+157+09852.private root@web:/root/nsupdate/
Nous allons pouvoir créer et mettre à jour nos certificats SSL/TLS Let's Encrypt avec acme.sh
.
Depuis le serveur Web, là où nous avons installer acme.sh
, créons un certificat.
Script avec 1 ligne
001root@web:~ # acme.sh --install-cert --domain example.com
Ca va nous créait un répertoire ici :
Script avec 4 lignes
001root@web:~ # ls -l /root/acme/data/example.com 002total 8 003drwxr-xr-x 2 root root 4096 juin 17 15:45 backup 004-rw-r--r-- 1 root root 98 juin 17 15:45 example.com.conf
Ensuite, vous pouvez envoyer la commande comme çà (nul besoin d'envoyer les variable d'environnement NSUPDATE_SERVER
et NSUPDATE_KEY
) :
Script avec 80 lignes
001root@web:~ # NSUPDATE_SERVER="dns.ipv10.net" NSUPDATE_KEY="/root/nsupdate/Knsupdate-key-zone.+157+09852.private" acme.sh --issue -k ec-384 -d example.com -d '*.example.com ' --dns dns_nsupdate --server letsencrypt 002[dimanche 27 novembre 2022, 18:41:37 (UTC+0100)] Using CA: https://acme-v02.api.letsencrypt.org/directory 003[dimanche 27 novembre 2022, 18:41:37 (UTC+0100)] Creating domain key 004[dimanche 27 novembre 2022, 18:41:37 (UTC+0100)] The domain key is here: /root/acme/data/example.com_ecc/example.com.key 005[dimanche 27 novembre 2022, 18:41:37 (UTC+0100)] Multi domain='DNS:example.com,DNS:*.example.com' 006[dimanche 27 novembre 2022, 18:41:37 (UTC+0100)] Getting domain auth token for each domain 007[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] Getting webroot for domain='example.com' 008[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] Getting webroot for domain='*.example.com' 009[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] Adding txt value: cFXIej611Rh8iar4hJiJfus85uHSk9FIhEWllDCrrQ4 for domain: _acme-challenge.example.com 010[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] adding _acme-challenge.example.com. 60 in txt "cFXIej611Rh8iar4hJiJfus85uHSk9FIhEWllDCrrQ4" 011[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] The txt record is added: Success. 012[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] Adding txt value: C8vU4Sgg0UythPJfeudNr9dvEl8D6eULaBHDRgKHESs for domain: _acme-challenge.example.com 013[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] adding _acme-challenge.example.com. 60 in txt "C8vU4Sgg0UythPJfeudNr9dvEl8D6eULaBHDRgKHESs" 014[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] The txt record is added: Success. 015[dimanche 27 novembre 2022, 18:41:39 (UTC+0100)] Let's check each DNS record now. Sleep 20 seconds first. 016[dimanche 27 novembre 2022, 18:42:00 (UTC+0100)] You can use '--dnssleep' to disable public dns checks. 017[dimanche 27 novembre 2022, 18:42:00 (UTC+0100)] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck 018[dimanche 27 novembre 2022, 18:42:00 (UTC+0100)] Checking example.com for _acme-challenge.example.com 019[dimanche 27 novembre 2022, 18:42:01 (UTC+0100)] Not valid yet, let's wait 10 seconds and check next one. 020[dimanche 27 novembre 2022, 18:42:12 (UTC+0100)] Checking example.com for _acme-challenge.example.com 021[dimanche 27 novembre 2022, 18:42:12 (UTC+0100)] Domain example.com '_acme-challenge.example.com' success. 022[dimanche 27 novembre 2022, 18:42:12 (UTC+0100)] Let's wait 10 seconds and check again. 023[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] You can use '--dnssleep' to disable public dns checks. 024[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck 025[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Checking example.com for _acme-challenge.example.com 026[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Domain example.com '_acme-challenge.example.com' success. 027[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Checking example.com for _acme-challenge.example.com 028[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Already success, continue next one. 029[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] All success, let's return 030[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Verifying: example.com 031[dimanche 27 novembre 2022, 18:42:24 (UTC+0100)] Pending, The CA is processing your order, please just wait. (1/30) 032[dimanche 27 novembre 2022, 18:42:27 (UTC+0100)] Success 033[dimanche 27 novembre 2022, 18:42:27 (UTC+0100)] Verifying: *.example.com 034[dimanche 27 novembre 2022, 18:42:28 (UTC+0100)] Pending, The CA is processing your order, please just wait. (1/30) 035[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Success 036[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Removing DNS records. 037[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Removing txt: cFXIej611Rh8iar4hJiJfus85uHSk9FIhEWllDCrrQ4 for domain: _acme-challenge.example.com 038[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] removing _acme-challenge.example.com. txt 039[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Removed: Success 040[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Removing txt: C8vU4Sgg0UythPJfeudNr9dvEl8D6eULaBHDRgKHESs for domain: _acme-challenge.example.com 041[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] removing _acme-challenge.example.com. txt 042[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Removed: Success 043[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Verify finished, start to sign. 044[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Lets finalize the order. 045[dimanche 27 novembre 2022, 18:42:32 (UTC+0100)] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/844254157/148100921877' 046[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] Downloading cert. 047[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/039018fe4ff377bae8ffa5414587248b87ba' 048[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] Cert success. 049-----BEGIN CERTIFICATE----- 050MIIEcDCCA1igAwIBAgISA5AY/k/zd7ro/6VBRYcki4e6MA0GCSqGSIb3DQEBCwUA 051MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD 052EwJSMzAeFw0yMjExMjcxNjQyMzNaFw0yMzAyMjUxNjQyMzJaMBIxEDAOBgNVBAMT 053B3p3M2IudHYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATyBsggIW81ICHMZRSZC7+z 054eT4vehWp+8/DjzzYVOXTbVXfoYT0OK7FG1bFe6w9K5RHjo6oAXDsaRYILUDpPxwd 055Ds/EDBx4a0FLlLhF5TRak2E4J0yWWcjTTzHSSaJWR+OjggJMMIICSDAOBgNVHQ8B 056Af8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB 057/wQCMAAwHQYDVR0OBBYEFN/cg8rD30RVvd5cFNjYTqnrvdBQMB8GA1UdIwQYMBaA 058FBQusxe3WFbLrlAJQOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcw 059AYYVaHR0cDovL3IzLm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMu 060aS5sZW5jci5vcmcvMB0GA1UdEQQWMBSCCSouenczYi50doIHenczYi50djBMBgNV 061HSAERTBDMAgGBmeBDAECATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpo 062dHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCCAQMGCisGAQQB1nkCBAIEgfQEgfEA 0637wB2AHoyjFTYty22IOo44FIe6YQWcDIThU070ivBOlejUutSAAABhLou/8IAAAQD 064AEcwRQIgBwly1igZHpDTzGGpd01WNVxrqRYH00LcCvLA7x4IXdgCIQDnkhdkMW+S 065pbrbHQ4Uqv8pBrVXnL2nLgkyImUWGHU76AB1AK33vvp8/xDIi509nB4+GGq0Zyld 066z7EMJMqFhjTr3IKKAAABhLou/9AAAAQDAEYwRAIgEMQsh2lYmTLkKpDDyEQuCnsO 067nA6/vnZVgdJcDE74HkwCIF/rhY/n0ZH6LL4yICj63JZzdJThnIq9zNjj03PlhraL 068MA0GCSqGSIkjldqdjql133qjdqljdlàç212dGGGxZGJXQ+sgKkxYBY5O2lxhvTgp 069V9mOr0HABBYJomGmlJ3o9/BZ6aADnQ40W8B8xnh5PlaDi0rNQ3gBhwLn4tZB+NfK 070KQDLpPIGqRrsdfACnkiu4GoiFkBBJY+HkgatAWdlRrlTlM8AkZNrX1kzg8u3jQY1 071SVVJ8g4qjbYWdCaUe8r/EMILX9bL4LvNtvW4gvQsNWVF2E7GbzawK153j1aP8gLl 072kCjTWyLOIWA1nhhoKKadcIYgmYG7GF3VMXceprrBPIMmRPRrCfRGErqVhxK3hvc8 0732uiyN3YDbpOHClnVe9PYjJZIVSswSXwYZKZkkRkAQKLgDTCs 074-----END CERTIFICATE----- 075[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] Your cert is in: /root/acme/data/example.com_ecc/example.com.cer 076[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] Your cert key is in: /root/acme/data/example.com_ecc/example.com.key 077[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] The intermediate CA cert is in: /root/acme/data/example.com_ecc/ca.cer 078[dimanche 27 novembre 2022, 18:42:33 (UTC+0100)] And the full chain certs is there: /root/acme/data/example.com_ecc/fullchain.cer 079Vous avez du nouveau courrier dans /var/mail/root 080root@web:~ #
À ce moment là, nous avons un certificat pour notre nom de domaine "example.com" et tous ces sous domaines "*.example.com"
Ce n'est pas forcement nécessaire, vous pouvez créer un certificat en plus pour "ftp.example.com" ; à vous de voir - ce permet d'avoir un/des certificats pour chaque machine, type de service.
TODO Note de Moi-même : Il y a des "get options" à la commande acme.sh
comme --reloadcmd
et --renew-hook
. À tester, pour mettre à jour les champs TLSA (DANE).
Pour faire un certificat Let's Encrypt pour le domaine "domain.com" qui est un DNAME (alias de domaine) de "other_domain.com" la commande serait :
Script avec 1 ligne
001root@web:~ # acme.sh --issue -k ec-384 -d domain.com -d '*.domain.com' --domain-alias other_domain.com --dns dns_nsupdate --server letsencrypt
Pour faire un certificat Let's Encrypt pour le domaine "domain.com" et tous ses sous-domaine "*.domain.com" ainsi que "other_domain.com" et tous ses sous-domaine "*.other_domain.com" et que "other_domain.com" est un alias de nom de domaine de "domain.com" (--challenge-alias domain.com
)
Script avec 1 ligne
001root@web:~ # acme.sh --issue -k ec-384 -d domain.com -d '*.domain.com' --challenge-alias domain.com -d other_domain.com -d '*.other_domain.com' --dns dns_nsupdate --server letsencrypt --force
Pour vous donner un exemple d'alias de domaine -> lab3w.com est un alias de domaine de lab3w.fr :
Script avec 6 lignes
001root@web:~ # host www.lab3w.com 002lab3w.com has DNAME record lab3w.fr. 003www.lab3w.com is an alias for www.lab3w.fr. 004www.lab3w.fr is an alias for web.lab3w.fr. 005web.lab3w.fr has address 158.69.126.137 006web.lab3w.fr has IPv6 address 2607:5300:60:9389:15:1:0:1
J'utilise l'algorithme de sécurité de courbes elliptiques (ec) d'une valeur de 384 bits.
Vous pouvez utiliser :
-k ec-256
Ou d'autres algorithme moins récents.
Ajouter votre certificat SSL à votre site Web HTTPS "*.example.com:443"
Script avec 20 lignes
001<IfModule mod_ssl.c> 002<VirtualHost [2607:5300:0060:9389:0015:0001:000a:0010]:443 10.101.150.10:443> 003 004 ServerName example.com 005 ServerAlias *.example.com 006 007 SSLEngine On 008 009# SSLProtocol -all +SSLv2 010# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP 011# SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW 012 013 SSLCertificateFile /root/acme/data/example.com_ecc/example.com.cer 014 SSLCertificateKeyFile /root/acme/data/example.com_ecc/example.com.key 015 SSLCACertificateFile /root/acme/data/example.com_ecc/ca.cer 016 017 [...] 018 019</VirtualHost> 020</IfModule>
SSL configuration serveur Web :
Je vous ajoute 2 scripts (vraiment à l'arache, çà peut aider) :
On créait un fichier : vim /root/acme-certif-date_verification.bash
Script avec 224 lignes
001#!/bin/bash 002#----------------------------------- 003# Checking certificates SSL date expiration 004#----------------------------------- 005# Author : O.Romain.Jaillet-ramey (orj AT lab3w DOT fr) 006# Date created : 20221201 007# Date modified : 20231222 008#----------------------------------- 009 010#----------------------------------- 011# Config de la clef DNS pour l'update 012key_file="/root/Kupdate-dd-zone.+157+09856.private" 013maj_nsupdate=1 014 015# Config Let's Encrypt dir 016dir_certs="/root/acme/data/" 017#dir_certs="/etc/ssl/letsencrypt/" 018 019# Config Let's Encrypt check domains 020domains="lab3w.fr zw3b.fr zw3b.tv zw3b.site zw3b.com zw3b.net zw3b.blog zw3b.eu ipv10.net mail.zw3b.eu" 021#domains="lab3w.lan" 022 023#---------------------------------- 024# ZIMBRA MAIL SERVER UPDATE CERTICATE 025# 20240509 026 027# Config private key SSH for update on zimbra mail server 028ssh_public_key="/root/.ssh/id_ecdsa.pub" 029zimbra_mail_server_addr="10.104.0.1" 030zimbra_mail_server_user="root" 031 032# Value to ssh-agent (for loggin automatic -> https://howto.zw3b.fr/linux/reseaux/ssh-scp-par-certificats) 033auth=`find /tmp -user $LOGNAME -type s -name "*agent*" -print 2>/dev/null` 034SSH_AUTH_SOCK=$auth 035export SSH_AUTH_SOCK 036 037#----------------------------------- 038 039#------------------------------------------------------------------------------------------------------ 040for domain in ${domains}; do 041 042# expiryDate="$(echo $(date -d "$(echo | openssl s_client -servername ${domain} -connect ${domain}:443 -verify_quiet | openssl x509 -enddate -noout | awk -F= '{print $2}')"))" 043 expiryDate="$(echo $(date -d "$(echo | openssl x509 -in ${dir_certs}${domain}_ecc/${domain}.cer -enddate -noout | awk -F= '{print $2}')"))" 044 045# expiryDays=$(( ($(date -d "$(echo | openssl s_client -servername ${domain} -connect ${domain}:443 -verify_quiet | openssl x509 -enddate -noout | awk -F= '{print $2}')" '+%s') - $(date '+%s')) / 86400 )) 046 expiryDays=$(( ($(date -d "$(echo | openssl x509 -in ${dir_certs}${domain}_ecc/${domain}.cer -enddate -noout | awk -F= '{print $2}')" '+%s') - $(date '+%s')) / 86400 )) 047 048 renewDay=$(($expiryDays - 30)) 049 050 subjectAltName=$(echo | openssl x509 -noout -ext subjectAltName -in ${dir_certs}${domain}_ecc/${domain}.cer | grep DNS | tr -d [:blank:]) 051# subjectAltName=$(echo | openssl s_client -servername ${domain} -connect ${domain}:443 -verify_quiet | openssl x509 -noout -ext subjectAltName -noout | grep DNS | tr -d [:blank:]) 052 053 signature_certif=$(openssl x509 -noout -fingerprint -sha256 < ${dir_certs}${domain}_ecc/${domain}.cer | tr -d : | cut -d"=" -f2) 054 signature_ondns=$(dig TLSA _443._tcp.${domain} @dns.google +short | awk {'print $4$5'}) 055 056 old="$IFS" 057 IFS="," 058 tab=( $subjectAltName ) 059 IFS="$old" 060 echo "#-----------------------------------" 061 echo "Domain : ${domain}" 062 echo "#----------" 063 echo "" 064 echo "Certificats SSL expiration date : ${expiryDate}" 065 echo "Certificats SSL expiration days : ${expiryDays}" 066# echo "Subject Alt Names : ${subjectAltName}" 067 echo "" 068 echo "Subject Alt Names :" 069 echo " \ " 070 for (( i=0 ; i<${#tab[*]} ; i++ )) ; do 071 echo " +-> "${tab[$i]} 072 done 073 echo "" 074 echo "Certificat Signature check :" 075 echo " \ " 076 echo " +-" ${signature_certif} "-> Certificat signature" 077 if [ -n "${signature_ondns}" ] 078 then 079 echo " +-" ${signature_ondns} "-> Signature on DNS RR TLSA" 080 fi 081 if [ -z "${signature_ondns}" ] 082 then 083 echo " \ " 084 echo " +--> NO DNS RR TLSA (DANE)" 085 fi 086 if [ "${signature_certif}" = "${signature_ondns}" ] 087 then 088 echo " \ " 089 echo " +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK" 090 fi 091 092 if [ "${signature_certif}" != "${signature_ondns}" ] && [ -n "${signature_ondns}" ] 093 then 094 echo " \ " 095 echo " +--> DNS RR TLSA (DANE) on Cerfificat Signature - NO OK" 096 echo " \ " 097 echo " +--> Update your DNS RR TLSA (DANE) with \"nsupdate\" command" 098 echo " |" 099 echo " | ; example" 100 echo " | server dns.ipv10.net" 101 echo " | ;" 102 103 for (( i=0 ; i<${#tab[*]} ; i++ )) ; do 104# ntab[$i]=$(echo ${tab[$i]} | awk 'BEGIN { FS = ":" }; { if($2 !~ /\*/ ) print $2 }') 105 ntab[$i]=$(echo ${tab[$i]} | awk 'BEGIN { FS = ":" }; { print $2 }') 106 dtab[$i]=$(echo ${ntab[$i]} | awk 'BEGIN { FS="."} { print $(NF-1)"."$(NF); }') 107 ntab[$i]=$(echo ${ntab[$i]} | sed -e "s/\*/www/g") 108 109 if [ "${ntab[$i]}" != "" ] 110 then 111 if [[ "${ntab[$i]}" =~ .*"${dtab[$i]}".* ]]; then 112 echo " | ; MAJ FOR WEB" 113 echo " | zone ${dtab[$i]}" 114 echo " | ; DANE RRset TLSA HTTP Secure" 115 echo " | update del _443._tcp.${ntab[$i]}. 3600 TLSA" 116 echo " | update add _443._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 117 echo " | send" 118 echo " |" 119 fi 120 121 if [[ "${domain}" == "mail.zw3b.eu" ]] && [[ "${ntab[$i]}" =~ .*"${dtab[$i]}".* ]]; then 122 if [[ "${ntab[$i]}" =~ .*"smtp".* ]]; then 123 echo " | ; MAJ FOR MX" 124 echo " | zone ${dtab[$i]}" 125 echo " | ; DANE RRset TLSA SMTP" 126 echo " | update del _25._tcp.${ntab[$i]}. 3600 TLSA" 127 echo " | update add _25._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 128 echo " | ; DANE RRset TLSA SMTP Secure" 129 echo " | update del _465._tcp.${ntab[$i]}. 3600 TLSA" 130 echo " | update add _465._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 131 echo " | ; DANE RRset TLSA SMTP Submission" 132 echo " | update del _587._tcp.${ntab[$i]}. 3600 TLSA" 133 echo " | update add _587._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 134 echo " | send" 135 echo " |" 136 fi 137 fi 138 fi 139 done 140 echo " +------------------------------------" 141 echo "" 142 143 #-------------------------------- 144 if [ "${maj_nsupdate}" -eq 1 ] 145 then 146 ( 147 echo ";----------------------------------" 148 echo "; MAJ NSUPDATE...." 149 echo ";-------" 150 echo "server dns.ipv10.net" 151 echo ";-------" 152 echo "" 153 for (( i=0 ; i<${#tab[*]} ; i++ )) ; do 154# ntab[$i]=$(echo ${tab[$i]} | awk 'BEGIN { FS = ":" }; { if($2 !~ /\*/ ) print $2 }') 155 ntab[$i]=$(echo ${tab[$i]} | awk 'BEGIN { FS = ":" }; { print $2 }') 156 dtab[$i]=$(echo ${ntab[$i]} | awk 'BEGIN { FS="."} { print $(NF-1)"."$(NF); }') 157 ntab[$i]=$(echo ${ntab[$i]} | sed -e "s/\*/www/g") 158 159 if [ "${ntab[$i]}" != "" ] 160 then 161 if [[ "${ntab[$i]}" =~ .*"${dtab[$i]}".* ]]; then 162 echo "; MAJ FOR WEB" 163 echo "zone ${dtab[$i]}" 164 echo "; DANE RRset TLSA HTTP Secure" 165 echo "update del _443._tcp.${ntab[$i]}. 3600 TLSA" 166 echo "update add _443._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 167 echo "send" 168 echo "" 169 fi 170 171 if [[ "${domain}" == "mail.zw3b.eu" ]] && [[ "${ntab[$i]}" =~ .*"${dtab[$i]}".* ]]; then 172 if [[ "${ntab[$i]}" =~ .*"smtp".* ]]; then 173 echo "; MAJ FOR MX" 174 echo "zone ${dtab[$i]}" 175 echo "; DANE RRset TLSA SMTP" 176 echo "update del _25._tcp.${ntab[$i]}. 3600 TLSA" 177 echo "update add _25._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 178 echo "; DANE RRset TLSA SMTP Secure" 179 echo "update del _465._tcp.${ntab[$i]}. 3600 TLSA" 180 echo "update add _465._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 181 echo "; DANE RRset TLSA SMTP Submission" 182 echo "update del _587._tcp.${ntab[$i]}. 3600 TLSA" 183 echo "update add _587._tcp.${ntab[$i]}. 3600 TLSA 3 0 1 ${signature_certif}" 184 echo "send" 185 echo "" 186 fi 187 fi 188 fi 189 done 190 echo ";----------------------------------" 191 ) | nsupdate -k ${key_file} -v 192 193 # ZIMBRA SCRIPT 194 # 20240509 195 if [ "${domain}" == "mail.zw3b.eu" ]; then 196 echo " +--> Update Certificate on mail server \"${domain}\"" 197 echo " |" 198 echo " \\" 199 echo " +--> RSYNC" 200 rsync -av -e ssh -i ${ssh_public_key} /root/acme/data/${domain}_ecc/ ${zimbra_mail_server_user}@${zimbra_mail_server_addr}:/opt/zimbra/ssl/letsencrypt_ecc/ 201 echo " +--> Add Signature Certificat of ISRG Root X1 (Internet Security Research Group) to my certificate" 202 ssh ${zimbra_mail_server_user}@${zimbra_mail_server_addr} -i ${ssh_public_key} -x "cat /root/ISRG-X1.pem >> /opt/zimbra/ssl/letsencrypt_ecc/fullchain.cer ; sudo chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt_ecc/${domain}.key" 203 echo " +--> Verfication Certificate Chain by Zimbra command" 204 ssh ${zimbra_mail_server_user}@${zimbra_mail_server_addr} -i ${ssh_public_key} -x "sudo su - zimbra -c '/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt_ecc/${domain}.key /opt/zimbra/ssl/letsencrypt_ecc/${domain}.cer /opt/zimbra/ssl/letsencrypt_ecc/fullchain.cer'" 205 echo " +--> Change old certicate to new certificate commercial" 206 ssh ${zimbra_mail_server_user}@${zimbra_mail_server_addr} -i ${ssh_public_key} -x "sudo cp /opt/zimbra/ssl/letsencrypt_ecc/${domain}.key /opt/zimbra/ssl/zimbra/commercial/commercial.key ; sudo chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key" 207 echo " +--> Finally deploy the new Let’s Encrypt SSL certificate." 208 ssh ${zimbra_mail_server_user}@${zimbra_mail_server_addr} -i ${ssh_public_key} -x "sudo su - zimbra -c '/opt/zimbra/bin/zmcertmgr deploycrt comm /opt/zimbra/ssl/letsencrypt_ecc/${domain}.cer /opt/zimbra/ssl/letsencrypt_ecc/fullchain.cer'" 209 echo " +--> Restart Mail server Zimbra" 210 ssh ${zimbra_mail_server_user}@${zimbra_mail_server_addr} -i ${ssh_public_key} -x "/etc/init.d/zimbra restart" 211 fi 212 # ZIMBRA SCRIPT 213 214 fi 215 #-------------------------------- 216 217 fi 218 echo "" 219done 220 221echo "#-----------------------------------" 222echo "" 223 224exit 1
Donner les droits d'executer à l'utilisateur "chmod u+x /root/acme-certif-date_verification.bash
" ;
puis lancer le script "/root/acme-certif-date_verification.bash
".
Vous retournera quelque chose comme çà :
Script avec 571 lignes
001root@web:~ # /root/acme-certif-date_verification.bash 002#----------------------------------- 003Domain : lab3w.fr 004#---------- 005 006Certificats SSL expiration date : samedi 23 septembre 2023, 23:51:07 (UTC+0200) 007Certificats SSL expiration days : 46 008 009Subject Alt Names : 010 \ 011 +-> DNS:*.lab3w.com 012 +-> DNS:*.lab3w.fr 013 +-> DNS:lab3w.com 014 +-> DNS:lab3w.fr 015 016Certificat Signature check : 017 \ 018 +- ECFFB8AEA0FF53484F21294E4F69C39CF34F4D7390CAAC66B8C8B0A50657EA50 -> Certificat signature 019 +- ECFFB8AEA0FF53484F21294E4F69C39CF34F4D7390CAAC66B8C8B0A50657EA50 -> Signature on DNS RR TLSA 020 \ 021 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 022 023#----------------------------------- 024Domain : zw3b.fr 025#---------- 026 027Certificats SSL expiration date : vendredi 22 septembre 2023, 23:23:36 (UTC+0200) 028Certificats SSL expiration days : 45 029 030Subject Alt Names : 031 \ 032 +-> DNS:api.zw3b.fr 033 +-> DNS:howto.zw3b.fr 034 +-> DNS:mailing.zw3b.fr 035 +-> DNS:radio.zw3b.fr 036 +-> DNS:www.zw3b.fr 037 +-> DNS:zw3b.fr 038 039Certificat Signature check : 040 \ 041 +- C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D -> Certificat signature 042 +- C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D -> Signature on DNS RR TLSA 043 \ 044 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 045 046#----------------------------------- 047Domain : zw3b.tv 048#---------- 049 050Certificats SSL expiration date : vendredi 22 septembre 2023, 23:24:59 (UTC+0200) 051Certificats SSL expiration days : 45 052 053Subject Alt Names : 054 \ 055 +-> DNS:www.zw3b.tv 056 +-> DNS:zw3b.tv 057 058Certificat Signature check : 059 \ 060 +- 742D5E938E928F0E7F9A87811E0CFE1BE399005E2B2CAC1BBB42971E656C25A3 -> Certificat signature 061 +- 742D5E938E928F0E7F9A87811E0CFE1BE399005E2B2CAC1BBB42971E656C25A3 -> Signature on DNS RR TLSA 062 \ 063 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 064 065#----------------------------------- 066Domain : zw3b.site 067#---------- 068 069Certificats SSL expiration date : vendredi 20 octobre 2023, 23:33:51 (UTC+0200) 070Certificats SSL expiration days : 73 071 072Subject Alt Names : 073 \ 074 +-> DNS:*.zw3b.site 075 +-> DNS:zw3b.site 076 077Certificat Signature check : 078 \ 079 +- C894DD1ACD81BF4613E69927FB0F7539018165182BA2C4B5587D33A8C9D1E411 -> Certificat signature 080 +- C894DD1ACD81BF4613E69927FB0F7539018165182BA2C4B5587D33A8C9D1E411 -> Signature on DNS RR TLSA 081 \ 082 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 083 084#----------------------------------- 085Domain : zw3b.net 086#---------- 087 088Certificats SSL expiration date : vendredi 22 septembre 2023, 23:24:08 (UTC+0200) 089Certificats SSL expiration days : 45 090 091Subject Alt Names : 092 \ 093 +-> DNS:www.zw3b.net 094 +-> DNS:zw3b.net 095 096Certificat Signature check : 097 \ 098 +- 992DB6977A23A379BA0378335C26E0855CAA4DEF20D9BC986EE947C6FA9719C9 -> Certificat signature 099 +- 992DB6977A23A379BA0378335C26E0855CAA4DEF20D9BC986EE947C6FA9719C9 -> Signature on DNS RR TLSA 100 \ 101 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 102 103#----------------------------------- 104Domain : zw3b.blog 105#---------- 106 107Certificats SSL expiration date : samedi 23 septembre 2023, 23:51:42 (UTC+0200) 108Certificats SSL expiration days : 46 109 110Subject Alt Names : 111 \ 112 +-> DNS:*.zw3b.blog 113 +-> DNS:zw3b.blog 114 115Certificat Signature check : 116 \ 117 +- 13B178DBE595C90AF7B461C115B5B2E323AC6403CACB2BA1F62345669DF47F25 -> Certificat signature 118 +- 13B178DBE595C90AF7B461C115B5B2E323AC6403CACB2BA1F62345669DF47F25 -> Signature on DNS RR TLSA 119 \ 120 +--> DNS RR TLSA (DANE) on Cerfificat Signature - OK 121 122#----------------------------------- 123Domain : zw3b.eu 124#---------- 125 126Certificats SSL expiration date : mercredi 20 mars 2024, 23:15:21 (UTC+0200) 127Certificats SSL expiration days : 89 128 129Subject Alt Names : 130 \ 131 +-> DNS:*.zw3b.eu 132 +-> DNS:zw3b.eu 133 134Certificat Signature check : 135 \ 136 +- 76B2ABF86AD5D7002B03BAE2C7474E42E6ECA5DC4625BCABFBF9577165784274 -> Certificat signature 137 +- 122DB6977A23A379BA0378335C26E0855CAA4DEF20D9BC986EE947C6FA9719D7 -> Signature on DNS RR TLSA 138 \ 139 +--> DNS RR TLSA (DANE) on Cerfificat Signature - NO OK 140 \ 141 +--> Update your DNS RR TLSA (DANE) with "nsupdate" command 142 | 143 | ; example 144 | server dns.ipv10.net 145 | ; 146 | ; MAJ FOR WEB 147 | zone zw3b.eu 148 | ; DANE RRset TLSA HTTP Secure 149 | update del _443._tcp.www.zw3b.eu. 3600 TLSA 150 | update add _443._tcp.www.zw3b.eu. 3600 IN TLSA 3 0 1 76B2ABF86AD5D7002B03BAE2C7474E42E6ECA5DC4625BCABFBF9577165784274 151 | update del _443._tcp.zw3b.eu. 3600 TLSA 152 | update add _443._tcp.zw3b.eu. 3600 IN TLSA 3 0 1 76B2ABF86AD5D7002B03BAE2C7474E42E6ECA5DC4625BCABFBF9577165784274 153 | send 154 | 155 +------------------------------------ 156 157#----------------------------------- 158Domain : ipv10.net 159#---------- 160 161Certificats SSL expiration date : samedi 23 septembre 2023, 23:49:51 (UTC+0200) 162Certificats SSL expiration days : 46 163 164Subject Alt Names : 165 \ 166 +-> DNS:*.ipv01.net 167 +-> DNS:*.ipv10.net 168 +-> DNS:ipv01.net 169 +-> DNS:ipv10.net 170 171Certificat Signature check : 172 \ 173 +- 924CACB8AB876888A3F07BDC9B6B6C39235502161991EECE5EC945174E91E07C -> Certificat signature 174 \ 175 +--> NO DNS RR TLSA (DANE) on Cerfificat Signature. 176 177#----------------------------------- 178Domain : mail.zw3b.eu 179#---------- 180 181Certificats SSL expiration date : mercredi 20 mars 2024, 16:26:36 (UTC+0100) 182Certificats SSL expiration days : 89 183 184Subject Alt Names : 185 \ 186 +-> DNS:imap.zw3b.blog 187 +-> DNS:imap.zw3b.com 188 +-> DNS:imap.zw3b.eu 189 +-> DNS:imap.zw3b.fr 190 +-> DNS:imap.zw3b.net 191 +-> DNS:imap.zw3b.site 192 +-> DNS:imap.zw3b.tv 193 +-> DNS:mail.zw3b.blog 194 +-> DNS:mail.zw3b.com 195 +-> DNS:mail.zw3b.eu 196 +-> DNS:mail.zw3b.fr 197 +-> DNS:mail.zw3b.net 198 +-> DNS:mail.zw3b.site 199 +-> DNS:mail.zw3b.tv 200 +-> DNS:pop.zw3b.blog 201 +-> DNS:pop.zw3b.com 202 +-> DNS:pop.zw3b.eu 203 +-> DNS:pop.zw3b.fr 204 +-> DNS:pop.zw3b.net 205 +-> DNS:pop.zw3b.site 206 +-> DNS:pop.zw3b.tv 207 +-> DNS:smtp.zw3b.blog 208 +-> DNS:smtp.zw3b.com 209 +-> DNS:smtp.zw3b.eu 210 +-> DNS:smtp.zw3b.fr 211 +-> DNS:smtp.zw3b.net 212 +-> DNS:smtp.zw3b.site 213 +-> DNS:smtp.zw3b.tv 214 +-> DNS:webmail.zw3b.blog 215 +-> DNS:webmail.zw3b.com 216 +-> DNS:webmail.zw3b.eu 217 +-> DNS:webmail.zw3b.fr 218 +-> DNS:webmail.zw3b.net 219 +-> DNS:webmail.zw3b.site 220 +-> DNS:webmail.zw3b.tv 221 222Certificat Signature check : 223 \ 224 +- 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F -> Certificat signature 225 +- 738380ECBB58302D80948CAABBD0BBAD62A47F21BB5E29EEECD1E50354491078 -> Signature on DNS RR TLSA 226 \ 227 +--> DNS RR TLSA (DANE) on Cerfificat Signature - NO OK 228 \ 229 +--> Update your DNS RR TLSA (DANE) with "nsupdate" command 230 | 231 | ; example 232 | server dns.ipv10.net 233 | ; 234 | ; MAJ FOR WEB 235 | zone zw3b.blog 236 | ; DANE RRset TLSA HTTP Secure 237 | update del _443._tcp.imap.zw3b.blog. 3600 TLSA 238 | update add _443._tcp.imap.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 239 | send 240 | 241 | ; MAJ FOR WEB 242 | zone zw3b.com 243 | ; DANE RRset TLSA HTTP Secure 244 | update del _443._tcp.imap.zw3b.com. 3600 TLSA 245 | update add _443._tcp.imap.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 246 | send 247 | 248 | ; MAJ FOR WEB 249 | zone zw3b.eu 250 | ; DANE RRset TLSA HTTP Secure 251 | update del _443._tcp.imap.zw3b.eu. 3600 TLSA 252 | update add _443._tcp.imap.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 253 | send 254 | 255 | ; MAJ FOR WEB 256 | zone zw3b.fr 257 | ; DANE RRset TLSA HTTP Secure 258 | update del _443._tcp.imap.zw3b.fr. 3600 TLSA 259 | update add _443._tcp.imap.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 260 | send 261 | 262 | ; MAJ FOR WEB 263 | zone zw3b.net 264 | ; DANE RRset TLSA HTTP Secure 265 | update del _443._tcp.imap.zw3b.net. 3600 TLSA 266 | update add _443._tcp.imap.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 267 | send 268 | 269 | ; MAJ FOR WEB 270 | zone zw3b.site 271 | ; DANE RRset TLSA HTTP Secure 272 | update del _443._tcp.imap.zw3b.site. 3600 TLSA 273 | update add _443._tcp.imap.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 274 | send 275 | 276 | ; MAJ FOR WEB 277 | zone zw3b.tv 278 | ; DANE RRset TLSA HTTP Secure 279 | update del _443._tcp.imap.zw3b.tv. 3600 TLSA 280 | update add _443._tcp.imap.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 281 | send 282 | 283 | ; MAJ FOR WEB 284 | zone zw3b.blog 285 | ; DANE RRset TLSA HTTP Secure 286 | update del _443._tcp.mail.zw3b.blog. 3600 TLSA 287 | update add _443._tcp.mail.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 288 | send 289 | 290 | ; MAJ FOR WEB 291 | zone zw3b.com 292 | ; DANE RRset TLSA HTTP Secure 293 | update del _443._tcp.mail.zw3b.com. 3600 TLSA 294 | update add _443._tcp.mail.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 295 | send 296 | 297 | ; MAJ FOR WEB 298 | zone zw3b.eu 299 | ; DANE RRset TLSA HTTP Secure 300 | update del _443._tcp.mail.zw3b.eu. 3600 TLSA 301 | update add _443._tcp.mail.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 302 | send 303 | 304 | ; MAJ FOR WEB 305 | zone zw3b.fr 306 | ; DANE RRset TLSA HTTP Secure 307 | update del _443._tcp.mail.zw3b.fr. 3600 TLSA 308 | update add _443._tcp.mail.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 309 | send 310 | 311 | ; MAJ FOR WEB 312 | zone zw3b.net 313 | ; DANE RRset TLSA HTTP Secure 314 | update del _443._tcp.mail.zw3b.net. 3600 TLSA 315 | update add _443._tcp.mail.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 316 | send 317 | 318 | ; MAJ FOR WEB 319 | zone zw3b.site 320 | ; DANE RRset TLSA HTTP Secure 321 | update del _443._tcp.mail.zw3b.site. 3600 TLSA 322 | update add _443._tcp.mail.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 323 | send 324 | 325 | ; MAJ FOR WEB 326 | zone zw3b.tv 327 | ; DANE RRset TLSA HTTP Secure 328 | update del _443._tcp.mail.zw3b.tv. 3600 TLSA 329 | update add _443._tcp.mail.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 330 | send 331 | 332 | ; MAJ FOR WEB 333 | zone zw3b.blog 334 | ; DANE RRset TLSA HTTP Secure 335 | update del _443._tcp.pop.zw3b.blog. 3600 TLSA 336 | update add _443._tcp.pop.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 337 | send 338 | 339 | ; MAJ FOR WEB 340 | zone zw3b.com 341 | ; DANE RRset TLSA HTTP Secure 342 | update del _443._tcp.pop.zw3b.com. 3600 TLSA 343 | update add _443._tcp.pop.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 344 | send 345 | 346 | ; MAJ FOR WEB 347 | zone zw3b.eu 348 | ; DANE RRset TLSA HTTP Secure 349 | update del _443._tcp.pop.zw3b.eu. 3600 TLSA 350 | update add _443._tcp.pop.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 351 | send 352 | 353 | ; MAJ FOR WEB 354 | zone zw3b.fr 355 | ; DANE RRset TLSA HTTP Secure 356 | update del _443._tcp.pop.zw3b.fr. 3600 TLSA 357 | update add _443._tcp.pop.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 358 | send 359 | 360 | ; MAJ FOR WEB 361 | zone zw3b.net 362 | ; DANE RRset TLSA HTTP Secure 363 | update del _443._tcp.pop.zw3b.net. 3600 TLSA 364 | update add _443._tcp.pop.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 365 | send 366 | 367 | ; MAJ FOR WEB 368 | zone zw3b.site 369 | ; DANE RRset TLSA HTTP Secure 370 | update del _443._tcp.pop.zw3b.site. 3600 TLSA 371 | update add _443._tcp.pop.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 372 | send 373 | 374 | ; MAJ FOR WEB 375 | zone zw3b.tv 376 | ; DANE RRset TLSA HTTP Secure 377 | update del _443._tcp.pop.zw3b.tv. 3600 TLSA 378 | update add _443._tcp.pop.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 379 | send 380 | 381 | ; MAJ FOR WEB 382 | zone zw3b.blog 383 | ; DANE RRset TLSA HTTP Secure 384 | update del _443._tcp.smtp.zw3b.blog. 3600 TLSA 385 | update add _443._tcp.smtp.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 386 | send 387 | 388 | ; MAJ FOR MX 389 | zone zw3b.blog 390 | ; DANE RRset TLSA SMTP 391 | update del _25._tcp.smtp.zw3b.blog. 3600 TLSA 392 | update add _25._tcp.smtp.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 393 | ; DANE RRset TLSA SMTP Secure 394 | update del _465._tcp.smtp.zw3b.blog. 3600 TLSA 395 | update add _465._tcp.smtp.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 396 | ; DANE RRset TLSA SMTP Submission 397 | update del _587._tcp.smtp.zw3b.blog. 3600 TLSA 398 | update add _587._tcp.smtp.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 399 | send 400 | 401 | ; MAJ FOR WEB 402 | zone zw3b.com 403 | ; DANE RRset TLSA HTTP Secure 404 | update del _443._tcp.smtp.zw3b.com. 3600 TLSA 405 | update add _443._tcp.smtp.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 406 | send 407 | 408 | ; MAJ FOR MX 409 | zone zw3b.com 410 | ; DANE RRset TLSA SMTP 411 | update del _25._tcp.smtp.zw3b.com. 3600 TLSA 412 | update add _25._tcp.smtp.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 413 | ; DANE RRset TLSA SMTP Secure 414 | update del _465._tcp.smtp.zw3b.com. 3600 TLSA 415 | update add _465._tcp.smtp.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 416 | ; DANE RRset TLSA SMTP Submission 417 | update del _587._tcp.smtp.zw3b.com. 3600 TLSA 418 | update add _587._tcp.smtp.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 419 | send 420 | 421 | ; MAJ FOR WEB 422 | zone zw3b.eu 423 | ; DANE RRset TLSA HTTP Secure 424 | update del _443._tcp.smtp.zw3b.eu. 3600 TLSA 425 | update add _443._tcp.smtp.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 426 | send 427 | 428 | ; MAJ FOR MX 429 | zone zw3b.eu 430 | ; DANE RRset TLSA SMTP 431 | update del _25._tcp.smtp.zw3b.eu. 3600 TLSA 432 | update add _25._tcp.smtp.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 433 | ; DANE RRset TLSA SMTP Secure 434 | update del _465._tcp.smtp.zw3b.eu. 3600 TLSA 435 | update add _465._tcp.smtp.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 436 | ; DANE RRset TLSA SMTP Submission 437 | update del _587._tcp.smtp.zw3b.eu. 3600 TLSA 438 | update add _587._tcp.smtp.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 439 | send 440 | 441 | ; MAJ FOR WEB 442 | zone zw3b.fr 443 | ; DANE RRset TLSA HTTP Secure 444 | update del _443._tcp.smtp.zw3b.fr. 3600 TLSA 445 | update add _443._tcp.smtp.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 446 | send 447 | 448 | ; MAJ FOR MX 449 | zone zw3b.fr 450 | ; DANE RRset TLSA SMTP 451 | update del _25._tcp.smtp.zw3b.fr. 3600 TLSA 452 | update add _25._tcp.smtp.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 453 | ; DANE RRset TLSA SMTP Secure 454 | update del _465._tcp.smtp.zw3b.fr. 3600 TLSA 455 | update add _465._tcp.smtp.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 456 | ; DANE RRset TLSA SMTP Submission 457 | update del _587._tcp.smtp.zw3b.fr. 3600 TLSA 458 | update add _587._tcp.smtp.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 459 | send 460 | 461 | ; MAJ FOR WEB 462 | zone zw3b.net 463 | ; DANE RRset TLSA HTTP Secure 464 | update del _443._tcp.smtp.zw3b.net. 3600 TLSA 465 | update add _443._tcp.smtp.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 466 | send 467 | 468 | ; MAJ FOR MX 469 | zone zw3b.net 470 | ; DANE RRset TLSA SMTP 471 | update del _25._tcp.smtp.zw3b.net. 3600 TLSA 472 | update add _25._tcp.smtp.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 473 | ; DANE RRset TLSA SMTP Secure 474 | update del _465._tcp.smtp.zw3b.net. 3600 TLSA 475 | update add _465._tcp.smtp.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 476 | ; DANE RRset TLSA SMTP Submission 477 | update del _587._tcp.smtp.zw3b.net. 3600 TLSA 478 | update add _587._tcp.smtp.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 479 | send 480 | 481 | ; MAJ FOR WEB 482 | zone zw3b.site 483 | ; DANE RRset TLSA HTTP Secure 484 | update del _443._tcp.smtp.zw3b.site. 3600 TLSA 485 | update add _443._tcp.smtp.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 486 | send 487 | 488 | ; MAJ FOR MX 489 | zone zw3b.site 490 | ; DANE RRset TLSA SMTP 491 | update del _25._tcp.smtp.zw3b.site. 3600 TLSA 492 | update add _25._tcp.smtp.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 493 | ; DANE RRset TLSA SMTP Secure 494 | update del _465._tcp.smtp.zw3b.site. 3600 TLSA 495 | update add _465._tcp.smtp.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 496 | ; DANE RRset TLSA SMTP Submission 497 | update del _587._tcp.smtp.zw3b.site. 3600 TLSA 498 | update add _587._tcp.smtp.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 499 | send 500 | 501 | ; MAJ FOR WEB 502 | zone zw3b.tv 503 | ; DANE RRset TLSA HTTP Secure 504 | update del _443._tcp.smtp.zw3b.tv. 3600 TLSA 505 | update add _443._tcp.smtp.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 506 | send 507 | 508 | ; MAJ FOR MX 509 | zone zw3b.tv 510 | ; DANE RRset TLSA SMTP 511 | update del _25._tcp.smtp.zw3b.tv. 3600 TLSA 512 | update add _25._tcp.smtp.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 513 | ; DANE RRset TLSA SMTP Secure 514 | update del _465._tcp.smtp.zw3b.tv. 3600 TLSA 515 | update add _465._tcp.smtp.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 516 | ; DANE RRset TLSA SMTP Submission 517 | update del _587._tcp.smtp.zw3b.tv. 3600 TLSA 518 | update add _587._tcp.smtp.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 519 | send 520 | 521 | ; MAJ FOR WEB 522 | zone zw3b.blog 523 | ; DANE RRset TLSA HTTP Secure 524 | update del _443._tcp.webmail.zw3b.blog. 3600 TLSA 525 | update add _443._tcp.webmail.zw3b.blog. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 526 | send 527 | 528 | ; MAJ FOR WEB 529 | zone zw3b.com 530 | ; DANE RRset TLSA HTTP Secure 531 | update del _443._tcp.webmail.zw3b.com. 3600 TLSA 532 | update add _443._tcp.webmail.zw3b.com. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 533 | send 534 | 535 | ; MAJ FOR WEB 536 | zone zw3b.eu 537 | ; DANE RRset TLSA HTTP Secure 538 | update del _443._tcp.webmail.zw3b.eu. 3600 TLSA 539 | update add _443._tcp.webmail.zw3b.eu. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 540 | send 541 | 542 | ; MAJ FOR WEB 543 | zone zw3b.fr 544 | ; DANE RRset TLSA HTTP Secure 545 | update del _443._tcp.webmail.zw3b.fr. 3600 TLSA 546 | update add _443._tcp.webmail.zw3b.fr. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 547 | send 548 | 549 | ; MAJ FOR WEB 550 | zone zw3b.net 551 | ; DANE RRset TLSA HTTP Secure 552 | update del _443._tcp.webmail.zw3b.net. 3600 TLSA 553 | update add _443._tcp.webmail.zw3b.net. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 554 | send 555 | 556 | ; MAJ FOR WEB 557 | zone zw3b.site 558 | ; DANE RRset TLSA HTTP Secure 559 | update del _443._tcp.webmail.zw3b.site. 3600 TLSA 560 | update add _443._tcp.webmail.zw3b.site. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 561 | send 562 | 563 | ; MAJ FOR WEB 564 | zone zw3b.tv 565 | ; DANE RRset TLSA HTTP Secure 566 | update del _443._tcp.webmail.zw3b.tv. 3600 TLSA 567 | update add _443._tcp.webmail.zw3b.tv. 3600 TLSA 3 0 1 6A42E98D3EADBB58C37A4127CEF3BB8BD004AC8DA39EE14F46549E52C75F1C4F 568 | send 569 | 570 +------------------------------------ 571
C'est juste pour information (on n'a pas besoin forcement de ce script), çà peut nous servir. Note de Moi-même 2023/12/14 : C'était avant çà.
Note de Moi-même 2023/12/14 : J'ai ajouté la commande nsupdate
(ligne 123 (101-127)) au script pour qu'il mette à jour les RR TLSA HTTPs sur le serveur DNS par nsupdate, si le certificat TLS Let's Encrypt change.
Note de Moi-même 2023/12/22 : J'ai ajouté la commande nsupdate
au script pour qu'il mette à jour les RR TLSA SMTPs sur le serveur DNS par nsupdate, si le certificat TLS Let's Encrypt change.
Note de Moi-même 2023/12/25 : J'ai remarqué un truc "embêtant" ; sur les certificats en domaines wildcard, dans le script ci-dessus je prend en compte "domain.tld" et "www.domain.tld" et met à jour les champs TLSA ; mais donc, vu que c'est un wilcard je peut, donc signer DANE pour "admin.domain.tld" ou "sub.domain.tld" mais -- comment le savoir automatiquement -- il faut mettre à jour manuellement - Une autre solution, serait de faire d'autres certificats gratuit Let's Encrypt -- bien précis pour "admin" et ne pas utiliser le wilcard -- selon sa stratégie de sécurité ;) vous comprennez.
J'ai écris ce commentaire aujourd'hui sur Debian-FR pour "mieux" ré-écrire une de mes ligne.
Un exemple de mise a jour dynamique par « nsupdate
» avec retour d'erreur ici .
Vous remarquerez que je vous parle des RR (Ressources Recors DNS) TLSA du protocole/mécanisme DANE (DNS - based Authentication of Named Entities) qui s'appuie sur le DNS pour authentifier des entités applicatives.
Par exemple pour les applications Web, vous pouvez utiliser "DNSSEC/DANE Validator " ; plugin Firefox qui vous permet de vérifier l'existence et la validité des enregistrements DNSSEC et TLSA liés aux noms de domaine.
Donc, normalement si vous avez suivis la procédure du dessus, acme.sh [...] --dns dns_nsupdate
met à jour nos certificats SSL/TLS Let's Encrypt tous les 60 jours, 30 jours avant l'expiration (le certificat en valide 90 jours) (AUTO_UPGRADE='1'
dans /root/acme/myaccount.conf
).
Par contre, si vous avez besoin de déployer vos certificats SSL/TLS sur vos proxy, load balancer frontaux, clusters ou autres serveurs (HTTP, FTP etc.), ci-dessous un exemple.
Si vous avez besoin d'utiliser vos certificats sur d'autres machines.
Ci-dessous un script RSYNC pour envoyer vos certificats sur d'autres machines serveurs.
On créait un fichier : root@web:~ # vim /root/acme-certif-frontend.bash
Script avec 204 lignes
001#!/bin/bash 002#----------------------------------- 003# RSYNC script for tranfert SSL/TLS certificats files modified on others servers 004#----------------------------------- 005# Author : O.Romain.Jaillet-ramey (orj AT lab3w DOT fr) 006# Date created : 20221201 007# Date modified : 20230920 008#----------------------------------- 009 010#------------------------------------------------------------------------------------------------------ 011# Authentification par certicats (sans humain) 012#----- 013auth=`find /tmp -user $LOGNAME -type s -name "*agent*" -print 2>/dev/null` 014SSH_AUTH_SOCK=$auth 015export SSH_AUTH_SOCK 016#------------------------------------------------------------------------------------------------------ 017 018#------------------------------------------------------------------------------------------------------ 019# Config 020#----- 021 022dir="/root/acme/data/" 023#files_extension=".cer .key" 024 025#------------------------------------------------------------------------------------------------------ 026# Files/Dir of certicats Domains to check with rsync 027# ${dir}${domain}_ecc/ 028#----- 029 030domains="lab3w.fr zw3b.fr zw3b.tv zw3b.site zw3b.net zw3b.blog zw3b.eu ipv10.net" 031#domains="lab3w.lan" 032 033#------------------------------------------------------------------------------------------------------ 034# Remote servers on which SSL certificates are needed 035#----- 036rservers="lb1.lab3w.lan lb2.lab3w.lan server.lab3w.com" 037 038rdir="/etc/ssl/letsencrypt/" 039ruser="root" 040rkey=".ssh/id_ecdsa" 041rport="22" 042 043#------------------------------------------------------------------------------------------------------ 044# texts 045#----- 046 047text_file=() 048text_file_ca=() 049text_server=() 050 051#------------------------------------------------------------------------------------------------------ 052# script 053#----- 054 055for rserver in ${rservers}; do 056 057text_status=() 058text_status_ca=() 059text_domain=() 060 061text_files=() 062 063text_server=("${rserver}") 064 065#------------------------------------------------------------------------------------------------------ 066# script authenfication 067#----- 068 069if ! ssh -p ${rport} -i ${rkey} ${ruser}@${rserver} "test pwd"; then 070 echo "Authentication failed !" 071 echo "Exit !" 072 exit 2 073fi 074 075#------------------------------------------------------------------------------------------------------ 076 077echo "#------------------------------------------------" 078echo "SERVER : ${rserver}" 079echo "" 080 081#------------------------------------------------------------------------------------------------------ 082# script RSYNC 083#----- 084 085for domain in ${domains}; do 086 087 text_files=("${domain}") 088 089 if ! ssh -p ${rport} -i ${rkey} ${ruser}@${rserver} "test -x ${rdir}${domain}_ecc"; then 090# echo "The remote directory "${rdir}${domain}_ecc" do not exist" 091# echo "Create directory" 092 ssh -p ${rport} -i ${rkey} ${ruser}@${rserver} "mkdir -p ${rdir}${domain}_ecc" 093 094 if ! ssh -p ${rport} -i ${rkey} ${ruser}@${rserver} "test -x ${rdir}${domain}_ecc"; then 095# echo "The remote directory "${rdir}${domain}_ecc" could not be created or has bad permissions." 096# echo "Exit !" 097 exit 2 098 fi 099 100# echo "Remote directory "${rdir}${domain}_ecc" OK !" 101# echo "" 102 fi 103 104# for ext in ${files_extension}; do 105# output=$(rsync -a --info=NAME -e "ssh -i ${rkey}" ${dir}${domain}_ecc/${domain}${ext} ${ruser}@${rserver}:${rdir}${domain}_ecc/${domain}${ext}) 106 output=$(rsync -a --info=NAME -e "ssh -i ${rkey}" ${dir}${domain}_ecc/ ${ruser}@${rserver}:${rdir}${domain}_ecc/) 107 if [ "output_${output}" = "output_" ]; then 108 text_status+=( "$(printf "%dn" $?)" ) 109 text_domain+=( "${domain}" ) 110 text_file+=( "${dir}${domain}_ecc/${output}" ) 111 112 else 113 text_status+=(150) 114 text_domain+=( "${domain}" ) 115 text_file+=( "${dir}${domain}_ecc/${output}" ) 116 117# text_files+=( "${domain}", "${dir}${domain}_ecc/${output}" ) 118 119 fi 120# rsync -a -e "ssh -i ${rkey}" ${dir}${domain}_ecc/ca.cer ${ruser}@${rserver}:${rdir}${domain}_ecc/ca.cer 121# status_ca+=( "$(printf "%dn" $?)" ) 122# done 123done # files 124 125 126#done # rservers 127 128#------------------------------------------------------------------------------------------------------ 129# Restart servers 130#---- 131 132restart_server=0 133 134msg="" 135i=0 136for code in "${text_status[@]}"; do 137 138# msg+="# MSG $i : ${file_cert[$i]}n" 139 140# echo "Code : ${code}" 141 if [ ${code} -eq 150 ]; then 142 143 msg+="#------------------------n" 144 msg+="# Server : ${text_server}n" 145 msg+="# Domain : ${text_domain[$i]}n" 146 msg+="# Files : ${text_file[$i]} is modified (status : ${text_status[$i]})n" 147 148# for file in "${text_files[${text_domain[$i]}]}"; do 149# msg+="# File : ${file} is modifiedn" 150# done 151 152 msg+="#------------------------n" 153 154 restart_server=1 155 fi 156 157 i=$((${i} + 1)) 158done 159 160if [ "_$msg" != "_" ]; then 161 echo -e $msg 162fi 163 164 165if [ ${restart_server} -eq 1 ]; then 166 167 for code in "${text_server[@]}"; do 168 169 # nodes servers 170 ssh -p ${rport} -i ${rkey} ${ruser}@${rserver} "/etc/init.d/apache2 reload" 171 172 echo "#---> Server Apache ${rserver} reloading" 173 174 done 175 176else 177 echo "#---> Server Apache ${rserver} do not reloading (no update certificat)" 178fi 179 180echo "" 181echo "#------------------------------------------------" 182echo "" 183 184done # rservers 185 186#------------------------------------------------------------------------------------------------------ 187 188echo "SERVER : LOCAL" 189echo "" 190if [ ${restart_server} -eq 1 ]; then 191 192 # local server 193 /etc/init.d/apache2 reload 194 echo "#---> Server Apache LOCAL reloading" 195 196else 197 echo "#---> Server Apache LOCAL do not reloading (no update certificat)" 198fi 199 200echo "" 201echo "#------------------------------------------------" 202echo "" 203 204#------------------------------------------------------------------------------------------------------
Pour les lignes "10 à 16" du script ci-dessus "l'authentification avec une paire de clefs", j'ai écris une documentation ici : SSH - SCP par certificats .
Pour lancer la mise à jour par rsync
(qui enverra les fichiers (seulement s'ils ont changés) sur les autres serveurs) :
Script avec 1 ligne
001root@web:~ # /root/acme-certif-frontend.bash
La commande envoie les fichiers modifiés sur les autres serveurs et redémare les serveurs Web Apache.
Il faut faire une tâche planifiée tous les jours à l'heure que vous voulez pour rester à jour niveau certificats SSL/TLS.
Par exemple mes tâches planifiées pour ce service ressemble à çà :
Script avec 4 lignes
001root@web:~ # crontab -l 002# Lets Encrypt (ACME) 00300 00 * * * sleep $(shuf -i 0-3600 -n1) ; "/root/acme"/acme.sh --cron --home "/root/acme" --config-home "/root/acme/data" ; /root/acme-certif-frontend.bash | mail -s "[ZW3B][DNSSEC] Acme + Rsync" "email_1@domain.fr,email_2@domain.fr" > /dev/null 00401 00 * * * /root/acme-certif-date_verification.bash | mail -s "[ZW3B][DNSSEC] Date Verification" "email_1@domain.fr,email_2@domain.fr" 1>>/var/log/syslog 2>/dev/null 2>&1
Il manque toujours la mise à jour des champs TLSA du protocole/mécanisme DANE, mais avec cela on a nos sites Web valident et sécurisés et les certificats SSL/TLS transférés et mis à jour sur vos frontaux et sur les autres machines.
Note de Moi-même du 2023/12/22 : J'ai ajouté au script acme-certif-date_verification.bash
les mises à jour DNS TLSA du protocole/mécanisme DANE qui sont expliquées" ci-dessous.
Note de Moi-même du 2023/08/08 : Si, vous avez configuré vos champs TLSA du protocole/mécanisme DANE (DNS - based Authentication of Named Entities) qui s'appuie sur le DNS pour authentifier des entités applicatives ; il faut/faudra mettre à jour les RR (Ressource Records) TLSA chaque fois que le certificat TLS/SSL (Let's Encrypt) est mis à jour, renouvelé par acme.sh
(tout le 60 jours).
On va donc utiliser "nsupdate
" pour mettre à jour dynamiquement les champs d'enregistrement (RR) TLSA (DANE).
Je vous "pose" un exemple :
Script avec 25 lignes
001root@web:~ # vim /root/nsupdate-zw3b_fr.nsupdate 002; 003server dns.ipv10.net 004zone zw3b.fr 005;---------------------- 006; UPDATE DANE 007; openssl x509 -noout -fingerprint -sha256 < /root/acme/data/zw3b.fr_ecc/zw3b.fr.cer | tr -d : 008; dig TLSA _443._tcp.zw3b.fr @dns.google +short 009; ------ 010; 011update del _443._tcp.zw3b.fr. 3600 TLSA 012update add _443._tcp.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 013update del _443._tcp.www.zw3b.fr. 3600 TLSA 014update add _443._tcp.www.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 015update del _443._tcp.api.zw3b.fr. 3600 TLSA 016update add _443._tcp.api.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 017update del _443._tcp.howto.zw3b.fr. 3600 TLSA 018update add _443._tcp.howto.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 019update del _443._tcp.radio.zw3b.fr. 3600 TLSA 020update add _443._tcp.radio.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 021update del _443._tcp.mailing.zw3b.fr. 3600 TLSA 022update add _443._tcp.mailing.zw3b.fr. 3600 IN TLSA 3 0 1 C1A68D384582BC4A88EC7DB3492678B1B6A6E088036FD90306F4F47AF5B7332D 023; 024send 025;
Et on lance la commande, avec la clef autorisée (allow-update { key "nsupdate-key-zone"; };
), pour mettre à jour notre zone DNS.
Script avec 1 ligne
001root@web:~ # nsupdate -k /root/Knsupdate-key-zone.+157+09852.private /root/nsupdate-zw3b_fr.nsupdate
TODO : Il faut, donc "assembler tout çà" ou le faire sois-même en ligne de commande chaque fois que le certificat TLS/SSL Let's Encrypt change.
En passant dans le script :/root/acme-certif-date_verification.bash
; il faut vérifier que toutes les entitées (sous-domaine, ports, protocoles) "Suject Alt name" soient bien signées DANE et non pas seulement, sur le nom domainedomain.tld
entcp
sur le port443
.
Le principe du protocole de sécurité DANE (DNS-based Authentication of Named Entities ).
Bon courage.
Salutations,
Romain