O OpenSSL e o canivete suico para certificados SSL/TLS. Todos os outros artigos neste site fazem referencia a comandos OpenSSL — esta página reune todos em um só lugar.
Verificar um certificado
Ver detalhes do certificado (servidor remoto)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text
Verificar data de expiração
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
Verificar subject e SANs
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
Verificar emissor (qual CA)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer
Verificar um arquivo de certificado local
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -dates # Apenas as datas
openssl x509 -in cert.pem -noout -subject # Apenas o subject
openssl x509 -in cert.pem -noout -ext subjectAltName # Apenas os SANs
Verificar a cadeia de certificados
Verificar completude da cadeia (remoto)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null
# Procure por:
# Verify return code: 0 (ok) ← Cadeia esta completa
# Verify return code: 21 (unable to verify) ← Cadeia esta incompleta
Verificar um certificado contra um arquivo de cadeia
openssl verify -CAfile chain.pem cert.pem
# Esperado: cert.pem: OK
Verificar se certificado e chave correspondem
# Esses dois hashes devem ser identicos
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
# Para chaves ECDSA:
openssl ec -in privkey.pem -pubout 2>/dev/null | openssl md5
openssl x509 -in cert.pem -pubkey -noout | openssl md5
Gerar chaves
ECDSA P-256 (recomendado)
openssl ecparam -genkey -name prime256v1 -noout -out privkey.pem
RSA 2048
openssl genrsa -out privkey.pem 2048
RSA 4096
openssl genrsa -out privkey.pem 4096
Gerar um CSR
ECDSA
openssl req -new -key privkey.pem -out csr.pem -subj "/CN=example.com"
Com SANs (multi-domínio)
openssl req -new -key privkey.pem -out csr.pem \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
Inspecionar um CSR
openssl req -in csr.pem -noout -text
Converter entre formatos
PEM → PFX (para Windows/IIS)
openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
PFX → PEM
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
Formatos de certificado explicados →
Depurar conexões TLS
Testar qual versão TLS e negociada
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Protocol"
Testar uma versão TLS especifica
# Testar TLS 1.2
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_2 2>/dev/null | grep "Protocol"
# Testar TLS 1.3
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_3 2>/dev/null | grep "Protocol"
Mostrar o handshake completo
openssl s_client -connect example.com:443 -servername example.com -msg
Verificar cipher suites suportadas
# Listar todos os ciphers que o servidor aceita
nmap --script ssl-enum-ciphers -p 443 example.com
Gerar um certificado auto-assinado (apenas para desenvolvimento)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
Para HTTPS localhost confiavel, use mkcert em vez disso.
Criar fullchain.pem a partir de arquivos separados
cat cert.pem chain.pem > fullchain.pem
A ordem importa: seu certificado primeiro, depois o(s) intermediário(s).
Perguntas frequentes
Como instalo o OpenSSL?
A maioria das distribuicoes Linux já o inclui. No macOS: brew install openssl. No Windows: instale via Git for Windows (inclui OpenSSL) ou Chocolatey (choco install openssl).
Qual a diferenca entre openssl x509 e openssl s_client?
x509 le um arquivo de certificado local. s_client conecta-se a um servidor remoto e recupera seu certificado. Use s_client para verificar um servidor em producao; use x509 para inspecionar um arquivo em disco.
Por que meus comandos mostram “unable to load certificate”?
O arquivo provavelmente esta codificado em DER (binario), não em PEM (texto). Adicione -inform DER ao comando:
openssl x509 -in cert.der -inform DER -noout -text