Bonjour, bonsoir.
J’ai réussis à récupérer la valeur que je souhaitais réponse « inception/expiration » d’un RR TLSA (commentaire 32) :
root@lv1.w1a:~ # timestamp_tlsa=$(node -pe 'JSON.parse(process.argv[1]).answers[1].data.expiration' "$(dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec)"); echo 'TLSA Date Expiration' : $(date '+%F %T' -d "@${timestamp_tlsa}")
TLSA Date Expiration : 2023-01-04 14:47:03
ou de cette manière (je m’étais embrouiller à parser le JSON) avec la « commande » jq
:
root@lv1.w1a:~ # dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec | jq -r .answers[1].data.expiration
1672840023
root@lv1.w1a:~ # timestamp_tlsa=$(dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec | jq -r .answers[1].data.expiration) ; echo 'TLSA Date Expiration :' $(date '+%F %T' -d "@${timestamp_tlsa}")
TLSA Date Expiration : 2023-01-04 14:47:03
Note de Moi-même : C’est la 1ère fois que j’installe l’API Node.js
Détails : installer nodejs
et le Node.js Package Manager (npm
) :
# apt install nodejs npm
# nodejs -v
v10.24.0
# npm -v
5.8.0
Installer à nodejs
des modules (ex : dohjs) ET cela dans le répertoire global ("-g
") par npm
.
# npm install npm@latest -g
# npm install https@latest -g
# npm install dns-packet@latest -g
# npm install dohjs -g
Avec l’option « -g
», les modules s’installent ici.
# ls -l /usr/local/lib/node_modules/
total 16
drwxr-xr-x 3 root root 4096 déc. 7 01:35 dns-packet
drwxr-xr-x 8 root root 4096 déc. 7 01:36 dohjs
drwxr-xr-x 2 root root 4096 déc. 7 01:35 https
drwxr-xr-x 7 root root 4096 déc. 7 01:29 npm
Ensuite je peut donc utiliser DoH :
# dohjs -v
0.2.0
# dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec
Par exemple « parser » avec du javascript (nodejs) qui me permet de récupérer le timestamp de la date d’expiration du champ TLSA.
# node -pe 'JSON.parse(process.argv[1]).answers[1].data.expiration' "$(dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec)");
1672840023
Et puis j’ai ajouté la commande date
pour avoir la date et les heures/minutes/secondes.
# timestamp_tlsa=$(node -pe 'JSON.parse(process.argv[1]).answers[1].data.expiration' "$(dohjs https://dns.google/dns-query _443._tcp.zw3b.eu TLSA -m GET +dnssec)")
# date '+%F %T' -d "@${timestamp_tlsa}"
2023-01-04 14:47:03
C’est déjà bien…
Post Scriptum :
Il y a une différence entre la date d’expiration du certificat « Wed, 01 Mar 2023 14:33:47 GMT » et celle de la valeur de l’expiration du champ TLSA qui est avant (c’est peut-être DNSSEC - pourtant non).
SSL/TLS Inception Date
2022-12-01 14:33:48
SSL/TLS Expiration Date :
2023-03-01 14:33:47
DANE TLSA Inception Date
2022-12-05 13:47:03
DANE TLSA Expiration Date :
2023-01-04 14:47:03
DNSSEC NSEC3 Inception Date (rien à voir avec les certificats SSL OK)
2022-12-01 15:58:13
DNSSEC NSEC3 Expiration Date :
2022-12-31 15:58:13
Qué bordel
Note de Moi-même : ¿il faut donc mettre à jour le RR TLSA tous les mois? - À vérifier.
Pourtant DANE est lié au certificat justement - Il ne va pas y avoir une autre valeur à la commande ci-dessous puisque c’est toujours le même certificat SSL/TLS.
# openssl x509 -noout -fingerprint -sha256 < /var/local/letsencrypt/data/zw3b.eu_ecc/zw3b.eu.cer | tr -d :
SHA256 Fingerprint=BF5D0425AD332E366432542C83A8827A498E737BB53F59D70AAA940BBA2C24A6
j’ajoute les commandes openssl
pour lire le certificat d’un service :
# echo | openssl s_client -servername www.zw3b.eu -connect zw3b.eu:443 | openssl x509 -noout -dates -checkend '86400'
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = zw3b.eu
verify return:1
notBefore=Dec 1 14:33:48 2022 GMT
notAfter=Mar 1 14:33:47 2023 GMT
Certificate will not expire
-checkend '86400'
(1 jour) → Certificate will not expire
-checkend '7344000'
(85 jours) → Certificate will expire
Bon j’ai fais çà pour les certificats SSL :
# expiryDays=$(( ($(date -d "$(echo | openssl s_client -servername www.zw3b.eu -connect zw3b.eu:443 -verify_quiet | openssl x509 -enddate -noout | awk -F= '{print $2}')" '+%s') - $(date '+%s')) / 86400 )) ; echo ${expiryDays}
84
# expiryDays=$(echo $(echo $(date -d "$(echo | openssl s_client -servername www.zw3b.eu -connect zw3b.eu:443 -verify_quiet | openssl x509 -enddate -noout | awk -F= '{print $2}')" '+%s') - $(date '+%s') | bc -l) / 86400 | bc -l) ; echo ${expiryDays}
84.34645833333333333333
# expiryHours=$(( ($(date -d "$(echo | openssl s_client -servername www.zw3b.eu -connect zw3b.eu:443 -verify_quiet | openssl x509 -enddate -noout | awk -F= '{print $2}')" '+%s') - $(date '+%s')) / 3600)) ; echo ${expiryHours}
2024
Romain