Estou tentando verificar a assinatura de um pacote no site do pacote FreeBSD
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
Isto dá três arquivos: digests
, digests.pub
digests.sig
eu levá-la de que digests.sig
é uma assinatura para o arquivo digests
com digests.pub
a chave pública. Mas tentei confirmar isso:
openssl dgst -verify digests.pub -signature digests.sig digests
e recebi a mensagem
Verification Failure
Suponho que tenho algo errado - alguém pode me dizer o que estou perdendo?
EDIT: Com base em uma busca pelo código fonte, acho que a função importante pode ser encontrada aqui , chamada de rsa_verify_cert_cb
chamadas RSA_verify
da biblioteca openssl. Mas ainda não descobri o que está sendo alimentado ou se é possível chamar essa função usando as openssl
ferramentas de linha de comando.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
também não parece corresponder.sha256sum digests
Respostas:
Como não há "Como Fazer" na Internet para verificação manual do pacote FreeBSD, eis o que eu descobri.
O truque é que a sequência de octetos na
openssl rsautl
saída é de fato um hash da sequência que é o hash SHA256 de um arquivo.Por exemplo, faça o download atual
http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, extraia-o e faça o seguinte:Método 1 (usando uma linha
openssl dgst
)É importante fazer aqui o
tr -d '\n'
descarte de uma nova linha da entrada padrão, para que não seja incluída na entrada de string paraopenssl dgst
.Este comando deve ser exibido
Verified OK
.Método 2 (comparação visual da cadeia de octetos do arquivo .sig com hash gerado manualmente)
Use o utilitário OpenSSL para despejar o conteúdo de digests.sig
Aqui você pode ver que o objeto incorporado é um hash SHA256 e seu valor é
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.Agora calcule o SHA256 do arquivo
digests
:echo
comando e compare com o valor retornado poropenssl rsautl
:Observe como o valor da etapa 3. corresponde ao valor da etapa 1., portanto, o arquivo
digests
é válido.fonte
Essa mensagem está dizendo que a chave pública não corresponde ao arquivo que você baixou. De acordo com a página de manual do dgst -verify filename, verifique a assinatura usando a chave pública em "filename". A saída é "Verification OK" ou "Verification Failure". A causa mais provável é que o arquivo foi corrompido durante o download. Eu tentaria fazer o download novamente e, se continuar com falha na verificação, isso é um sinal de um link de download comprometido (mas, como é do site freebsd, eu suspeitaria que seja simplesmente um erro de download. Mesmo assim, verificaria o novo faça o download apenas para garantir a segurança). Se você tiver uma conexão com a Internet lenta / não confiável, pode levar algumas tentativas para fazer o download certo. Se você precisar verificar informações sobre comandos,
fonte