Utilisation d'un téléchargeur de site Web en ligne de commande, tel que wget
,curl
ou tout autre ... Dans un script ...
J'ai les empreintes digitales certifiantes d'un site web SHA-1 et SHA-256. Pour des raisons de sécurité ( 1 ) ( 2 ), je ne souhaite pas utiliser le système public d'autorité de certification SSL. L'empreinte doit être codée en dur.
Une application comme wget peut-elle vérifier l’empreinte SSL?
wget n'a pas une telle fonctionnalité. ( 3 )
Utiliser wget --ca-certificate
ou curl --cacert
je devrais utiliser ma propre autorité de certification locale, ce que j'aimerais éviter, car cela ajoute beaucoup de complexité. C'est aussi très difficile et personne ne l'a jamais fait auparavant. ( 4 )
N'y a-t-il aucun outil, comme
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
La solution ne doit bien sûr pas être vulnérable à TOCTOU. ( 5 ) Le MITM pourrait laisser renvoyer une empreinte valide pour la demande du client openssl et altérer la demande wget suivante.
Réponses:
La source
Installez le logiciel requis:
Téléchargez le certificat SSL public:
Ou mieux:
Obtenir l'empreinte SHA-1:
Obtenez l'empreinte SHA-256:
Comparez manuellement les empreintes digitales SHA-1 et SHA-256 avec torproject.org FAQ: SSL .
Rendre éventuellement les certificats de certification inutiles à des fins de test. L' utilisation boucle , mais wget a un bug Bug et utilise les fichiers ca-même.
Télécharger avec curl et le certificat épinglé:
la source
En tcsh:
la source
zsh
, devrait également travailler pour bashC'est aussi assez:
la source
-md5
option pour récupérer l'empreinte digitale MD5.-md5
ne doit pas mettre entre-in
etserver.crt
.C’est assez facile à faire avec le
openssl
commande et ses fonctionnalités client.Le petit script suivant prendra un domaine donné (pas de préfixe https) et une empreinte SHA-1, et se terminera sans erreur (0) si l'empreinte récupérée correspond, mais avec le code de sortie 1 s'il n'y a pas de correspondance. Vous pouvez ensuite l'intégrer à votre script en testant simplement le dernier code de sortie
$?
:la source
wget
et de le compiler avec OpenSSL pour qu’il exécute ce que vous voulez en ligne, mais cela dépasse le cadre d’une réponse AU.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
devrait fonctionner, non? Eh bien, vous devez séparer les informations de session SSL de la réponse de contenu réelle.la source
Comme indiqué dans la documentation Net :: SSLeay, cette méthode implique une vérification après la transaction HTTP et ne doit donc pas être utilisée si vous souhaitez vérifier que vous communiquez avec le bon serveur avant de leur envoyer des données. Mais si tout ce que vous faites est de décider s'il faut ou non faire confiance à ce que vous venez de télécharger (cela ressemble à de votre référence 4), c'est très bien.
la source
C'est mon script de tous les jours:
Ouput:
la source