Como descobrir se um certificado OpenSSL foi criado por uma determinada chave privada?

6

Eu tenho um certificado OpenSSl. Eu também preciso da chave privada. Foi-me dito que está localizado em algum lugar no servidor, e é verdade, eu encontrei vários arquivos de chaves SSL.

Antes de experimentar todos eles com força bruta: há alguma maneira de descobrir no terminal se uma chave privada foi usada para criar o certificado?

    
por k0pernikus 12.05.2014 / 10:41

2 respostas

9

A referência clássica para isso é esta FAQ nos documentos on-line do Apache.

Nesse documento, um md5 do módulo é usado porque

As the public exponent is usually 65537 and it's difficult to visually check that the long modulus numbers are the same, you can use the following approach

Isso dá:

$ openssl rsa -noout -modulus -in key.pem.decrypted | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

Estou propondo o uso de substituição de processo para evitar a comparação visual do módulo:

$ diff \ 
    <(openssl x509 -noout -modulus -in cert.pem) \
    <(openssl rsa -noout -modulus -in key.pem.decrypted)

Se a saída estiver vazia, a chave privada corresponderá ao certificado.

Esta é apenas uma maneira mais conveniente de comparar as cordas do que a da resposta de Andrew Schulman, que também é válida.

Outra referência aqui .

    
por 12.05.2014 / 11:05
7

Para verificar se um arquivo de certificado certifica a chave pública associada a um determinado arquivo de chave privada, compare as chaves públicas associadas a cada uma:

openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout

O certificado e a chave privada são correspondidos se e somente se as chaves públicas forem idênticas.

    
por 12.05.2014 / 10:43