Comentários
- Esta parece ser mais uma pergunta para Stack Overflow. Ver. por exemplo. stackoverflow.com/questions/17143606/…
- Seria razoável implementar com API do openssl o máximo de funcionalidade possível.
Resposta
É muito fácil fazer isso com o openssl.
Digamos que foo.crt é o seu arquivo crt. Em seguida,
$ openssl x509 -in foo.crt -text -noout
imprimirá todas as informações necessárias (emissor, pkey: módulo rsa e expoente, algoritmo de assinatura, etc.) em formato de texto.
Se você fornecer
$ openssl x509 -in foo.crt -text -noout > foo.txt
, você salvará as informações anteriores no arquivo foo.txt.
Para responder à sua pergunta
Você pode me dizer como posso extrair deste arquivo uma chave pública pronta para uso em formato hexadecimal (byte)?
uma maneira de fazer isso é primeiro exportar a chave pública e, em seguida, convertê-la para a forma hexadecimal
$ openssl x509 -in foo.crt -noout -pubkey > foo-public $ openssl rsa -noout -text -in foo-public -pubin > foo-public-hex
Agora foo-public- hex contém sua pkey em formato hexadecimal.
Então você escreveu
Eu sei que neste arquivo está p, q e resto, mas Quero a chave pública final pronta para uso.
Não tenho certeza se estou entendendo … a chave privada não está no arquivo .crt, mas em O arquivo .key e o servidor não o enviarão ao cliente.
Se foo.key for sua chave privada, então
$openssl rsa -noout -text -in foo.key
você verá o expoente privado e os primos p, q em formato hexadecimal.
Comentários
- Nitpick: a linha de comando do openssl está disponível e funciona da mesma forma em todos os Unixes e Windows, não apenas no Linux. VMS é um pouco diferente, mas não muito.