Convertendo PKCS12 para PEM

Cenário

Pedi o certificado do cliente e ele me mandou um aquivo em formato PKCS12, e ainda por cima com senha :)

Eu preciso usar esse cert em NGINX e sem a senha de preferência.

Esse é o típico post nota mental para não ter que memorizar esses comandos.

Como Faz para separar tudo?

Primeiro vamos extrair a chave privada do arquivo P12 para formato PEM

openssl pkcs12 -in certificate.p12 -nocerts -out certificate.key

Agora vamos extrair o certificado

openssl pkcs12 -in certificate.p12 -clcerts -nokeys -out certificate.crt

Agora vamos extrair a cadeia (caso precise)

openssl pkcs12 -in certificate.p12 -cacerts -nokeys -chain > ca.crt

Para remover a senha da chave execute

openssl rsa -in certificate.key -out certificate_nopass.key

Concatenando CA com CRT para ter um certificado chained/fullchain.

cat certificate.crt ca.crt > fullchain.crt

Pronto agora você pode utilizar os arquivos PEM em seus serviços numa boa!

Como faz para checar tudo?

A checagem mais simples para ver se tá tudo bem

openssl verify certificate.crt openssl verify certificate.key

Verificando uma chave privada

openssl rsa -in privateKey.key -check

Verificando um certificado pem

openssl x509 -in certificate.crt -text -noout

Verificando um arquivo p12

openssl pkcs12 -info -in certificate.p12

Verificando um certificado já no ar

openssl s_client -connect mindnotes.sh:443

Erros comuns

Se você estiver tomando esse erro no NGINX

Nginx SSL: error:0B080074:x509 certificate routines: X509_check_private_key:key values mismatch

Você provavelmente concatenou o CA com o CRT de forma errada. Para conectenar corretamente siga essa ordem:

Your Primary SSL certificate (your_domain_name.crt)
  -> Your Intermediate certificate 
    -> Your Root certificate 

A estrutura interna deve ser algo como:

-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate: domain.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Intermediate certificate: intermediate.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Root certificate: root.crt)
-----END CERTIFICATE-----

Se concatenar corretamente não haverá problemas com o NGINX ou outro reverse proxy/webserver.

Debugando os certificados

Se voce ainda assim está tomando erros nos logs do seu NGINX, verifique se a chave privada dá match com o certificado, faça isso usando o openssl.

# openssl x509 -noout -modulus -in certificate.crt | openssl md5
(stdin)= 9b728f2acad237e350fc67ce750fa51d

# openssl rsa -noout -modulus -in certificate.key | openssl md5
(stdin)= 9b728f2acad237e350fc67ce750fa51d

A saída tem que ser a mesma se os certificado estiverem bacanas, se estiver diferente verifique se não pulou algum passo e se está com os arquivos certos.

Refs


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]