Como extrair a chave pública do certificado de atestado para usá-lo para verificação de assinatura?

2

Eu quero extrair a chave pública de um certificado para verificar uma determinada assinatura (para responder a minha própria pergunta em relação à parte de registro).

Eu tentei openssl x509 -in certificate.pem -pubkey -noout | openssl enc -base64 -d > publickey.pub e li com hexdump -C publickey.pub Eu tenho uma string hexadecimal, que tem 182 caracteres de comprimento. Eu esperava 128, porque eu preciso de duas coordenadas, que são 64 caracteres de comprimento.

Acho que só tenho a chave pública, mas os cabeçalhos ou qualquer outra coisa também. Então, você gostaria de me ajudar a extrair a chave pública em uma string hexadecimal?

    
por Community 07.01.2016 / 22:03

1 resposta

1

A página de manual openssl x509 descreve a opção -pubkey como:

-pubkey
        outputs the the certificate's SubjectPublicKeyInfo block in PEM format.

O formato PEM consiste em um arquivo DER codificado em Base64 , com linhas de cabeçalho e rodapé adicionadas. Depois de remover o cabeçalho e o rodapé e decodificar Base64 os dados (o que o comando openssl enc deve realmente fazer), você terá um arquivo DER, que contém ASN.1 dados em uma codificação binária.

Onde você está errado, está tentando ler a saída do DER diretamente com um editor hexadecimal. Em vez disso, você precisa decodificá-lo usando um analisador ASN.1, como openssl asn1parse .

Alternativamente, você pode preferir simplesmente usar:

openssl x509 -in certificate.pem -text -noout

e extrair as coordenadas de chave pública (que provavelmente serão mostradas como sequências de bytes em hexadecimal) da (% mais ou menos) -text de saída legível por humanos.

    
por 09.01.2016 / 21:54