
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 md5
do 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.