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

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

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

Antes de testar todos eles por força bruta: Existe uma maneira de descobrir no terminal se uma chave privada foi usada para criar o certificado?

Responder1

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

Nesse documento, um md5do módulo é usado porque

Como o expoente público geralmente é 65537 e é difícil verificar visualmente se os números dos módulos longos são iguais, você pode usar a seguinte abordagem

Isto 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 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 corresponde ao certificado.

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

Outra referênciaaqui.

Responder2

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 um:

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

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

informação relacionada