Usando um site de linha de comando downloader, tais como wget
, curl
ou em qualquer outro ... Em um script ...
Eu tenho as impressões digitais certificadas de SHA-1 e SHA-256 de um site. Devido a questões de segurança ( 1 ) ( 2 ), não quero usar o sistema público de autoridades de certificação SSL. A impressão digital deve ser codificada.
Um aplicativo semelhante ao wget pode verificar a impressão digital SSL?
O wget não possui essa funcionalidade. ( 3 )
Usando wget --ca-certificate
ou curl --cacert
eu teria que executar minha própria autoridade de certificação local, o que eu gostaria de impedir, porque isso adiciona muita complexidade. Também é ultra difícil e ninguém fez isso antes. ( 4 )
Não existe nenhuma ferramenta, como
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
Obviamente, a solução não deve ser vulnerável ao TOCTOU. ( 5 ) O MITM pode permitir retornar uma impressão digital válida para a solicitação do cliente openssl e violar a solicitação wget a seguir.
Respostas:
Fonte
Instale o software necessário:
Faça o download do certificado SSL público:
Ou melhor:
Obtenha a impressão digital SHA-1:
Obtenha a impressão digital SHA-256:
Compare manualmente as impressões digitais SHA-1 e SHA-256 com a torproject.org FAQ: SSL .
Opcionalmente, torne os certificados ca inúteis para fins de teste. Usando curl aqui, mas o wget tem um bug Bug e usa os arquivos ca de qualquer maneira.
Faça o download com curl e o certificado fixado:
fonte
No tcsh:
fonte
zsh
, devem trabalhar para a festança tambémIsso também é suficiente:
fonte
-md5
opção para recuperar a impressão digital MD5.-md5
não deve colocar entre-in
eserver.crt
.Isso é bastante fácil de fazer com o
openssl
comando e sua funcionalidade do cliente.O pequeno script a seguir pegará um determinado domínio (sem prefixo https) e uma impressão digital SHA-1 e sairá sem erro (0) se a impressão digital recuperada corresponder, mas com o código de saída 1 se não houver correspondência. Você pode incorporá-lo ao seu script simplesmente testando o último código de saída
$?
:fonte
wget
-lo e compilá-lo com o OpenSSL para que ele execute o que você deseja em linha, mas isso está além do escopo de uma resposta da UA.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
deveria funcionar, não? Bem, você precisa dividir as informações da sessão SSL da resposta real do conteúdo.fonte
Conforme descrito na documentação do Net :: SSLeay, esse método significa verificação após a transação HTTP e, portanto, não deve ser usado se você quiser verificar se está falando com o servidor certo antes de enviar os dados. Mas se tudo o que você está fazendo é decidir se deve ou não confiar no que você acabou de baixar (o que parece ser da sua referência nº 4), tudo bem.
fonte
Esse é o meu roteiro diário:
Ouput:
fonte