Использование загрузчика веб-сайта из командной строки, например wget
, curl
или любого другого ... В сценарии ...
У меня есть отпечаток пальца SHA-1 и SHA-256 на веб-сайте. Из-за проблем безопасности ( 1 ) ( 2 ) я не хочу использовать общедоступную систему центра сертификации SSL. Отпечаток пальца должен быть жестко закодирован.
Может ли приложение, похожее на wget, проверять отпечаток SSL?
У wget такой функциональности нет. ( 3 )
Используя wget --ca-certificate
или curl --cacert
я должен был бы запустить свой собственный локальный центр сертификации, что я хотел бы предотвратить, потому что это добавляет много сложности. Это также очень сложно, и никто никогда не делал этого раньше. ( 4 )
Разве нет такого инструмента, как
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
Решение, конечно, не должно быть уязвимым для TOCTOU. ( 5 ) MITM может позволить вернуть действительный отпечаток для запроса клиента openssl и подделать следующий запрос wget.
Ответы:
Источник
Установите необходимое программное обеспечение:
Загрузите общедоступный сертификат SSL:
Или лучше:
Получить отпечаток SHA-1:
Получить отпечаток SHA-256:
Вручную сравните отпечатки SHA-1 и SHA-256 с помощью torproject.org FAQ: SSL .
При желании сделать CA-сертификаты бесполезными для тестирования. Здесь используется curl , но wget содержит ошибку Bug и все равно использует ca-файлы.
Скачать с помощью curl и прикрепленного сертификата:
источник
В тсш:
источник
zsh
, должны работать на Баш тожеЭтого тоже достаточно:
источник
-md5
опцию для получения отпечатка пальца MD5.-md5
не должен ставить между-in
иserver.crt
.Это довольно легко сделать с помощью
openssl
команды и ее клиентской функциональности.Следующий небольшой скрипт возьмет данный домен (без префикса https) и отпечаток SHA-1 и завершится без ошибки (0), если найденный отпечаток совпадает, но с кодом выхода 1, если совпадения нет. Затем вы можете включить его в свой скрипт, просто протестировав последний код выхода
$?
:источник
wget
и скомпилировать его с помощью OpenSSL, чтобы он выполнял то, что вы хотите встроенным, но это выходит за рамки AU-ответа.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
должно работать, нет? Что ж, вы должны отделить информацию о сеансе SSL от фактического содержимого ответа.источник
Как указано в документации Net :: SSLeay, этот метод означает проверку после транзакции HTTP, и поэтому его не следует использовать, если вы хотите проверить, что вы говорите с нужным сервером перед отправкой им данных. Но если все, что вы делаете, это решаете, доверять или не доверять тому, что вы только что загрузили (что звучит так, как будто вы по вашей ссылке # 4), это нормально.
источник
Это мой повседневный сценарий:
Ouput:
источник