Korzystanie z wiersza poleceń internetowej downloader, takie jak wget
, curl
lub dowolny inny jeden ... W skrypcie ...
Posiadam odciski palców SHA-1 i SHA-256. Ze względów bezpieczeństwa ( 1 ) ( 2 ) nie chcę korzystać z publicznego systemu urzędu certyfikacji SSL. Odcisk palca musi być zakodowany na stałe.
Czy aplikacja typu wget może sprawdzić odcisk palca SSL?
wget nie ma takiej funkcjonalności. ( 3 )
Używając wget --ca-certificate
lub curl --cacert
musiałbym uruchomić własny lokalny urząd certyfikacji, czemu chciałbym zapobiec, ponieważ powoduje to dużą złożoność. Jest to również bardzo trudne i nikt wcześniej tego nie robił. ( 4 )
Czy nie ma takiego narzędzia
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
Rozwiązanie nie może oczywiście być wrażliwe na TOCTOU. ( 5 ) MITM może pozwolić zwrócić prawidłowy odcisk palca dla żądania klienta openssl i manipulować następującą prośbą wget.
Odpowiedzi:
Źródło
Zainstaluj wymagane oprogramowanie:
Pobierz publiczny certyfikat SSL:
Albo lepiej:
Uzyskaj odcisk palca SHA-1:
Uzyskaj odcisk palca SHA-256:
Ręcznie porównaj odciski palców SHA-1 i SHA-256 z torproject.org FAQ: SSL .
Opcjonalnie możesz uczynić certyfikaty ca bezużytecznymi do celów testowych. Korzystanie pozwijane tutaj, ale wget ma błąd Bug i wykorzystuje CA-plików w każdym razie.
Pobierz za pomocą curl i przypiętego certyfikatu:
źródło
W tcsh:
źródło
zsh
, powinien też działać na bashTo też wystarczy:
źródło
-md5
opcję pobierania odcisku palca MD5.-md5
nie wolno umieszczać pomiędzy-in
iserver.crt
.Jest to dość łatwe do wykonania dzięki
openssl
poleceniu i jego funkcjom klienta.Poniższy mały skrypt pobierze daną domenę (bez prefiksu https) i odcisk palca SHA-1 i zakończy działanie bez błędu (0), jeśli pobrany odcisk palca pasuje, ale z kodem wyjścia 1, jeśli nie ma dopasowania. Następnie możesz włączyć go do skryptu, po prostu testując ostatni kod wyjścia
$?
:źródło
wget
i skompilować za pomocą OpenSSL, aby działał on tak, jak chcesz, ale to jest poza zakresem odpowiedzi AU.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
powinno działać, nie? Cóż, musisz oddzielić informacje o sesji SSL od rzeczywistej odpowiedzi na treść.źródło
Jak opisano w dokumentacji Net :: SSLeay, ta metoda oznacza weryfikację po transakcji HTTP i dlatego nie należy jej używać, jeśli chcesz sprawdzić, czy rozmawiasz z właściwym serwerem przed wysłaniem im danych. Ale jeśli wszystko, co robisz, to decydujesz, czy zaufać temu, co właśnie pobrałeś (co brzmi jak z referencji nr 4), nie ma sprawy.
źródło
To mój codzienny skrypt:
Ouput:
źródło