Certificados SSL/TLS e chaves públicas/privadas

Chaves Pública/Privadas são formas de autenticar em um sistema que substituem as senhas escritas (chamadas de password login). Elas foram inventadas para dar mais segurança ao autenticar em um sistema.

Certificados X.509 são um nível mais complexo de chaves Públicas/Privadas.

Quais são os arquivos que compõem o protocolo SSL/TLS X.509?

Tanto os CAs como CAs intermediários como os clientes (clientes e servidores) possuem:

  • Chave privada (arquivo .key)
  • Certificado (é uma chave pública, em outras palavras) (arquivo .crt ou .pem)

É importante também que os clientes saibam quais foram as CAs que criaram/assinaram seu certificado. Para isso basta informar o certificado das CAs:

ca.crt (ou .pem)
ca-intermediate1.crt (ou .pem)
ca-intermediate2.cert (ou .pem)

Geralmente ao instalar certificados em softwares tipo nginx ou apache, você informa apenas um arquivo com os certificados CA. Esse arquivo tem a extensão .ca-bundle ou apenas .bundle. Ele contém todos os certificados CAs em um só arquivo, um seguido do outro. A ordem dos CAs dentro de um arquivo bundle é:

  • ...
  • Certificado CA 2 intermediário
  • Certificado CA 1 intermediário
  • Certificado CA root

Software que ajudam a criar chaves e certificados

Há alguns softwares que ajudam a gerenciar e gerar chaves privadas e certificados. Aí vão algumas:

X-Certificate and Key Management (XCA)

O X- Certificate and Key management (XCA) É uma solução completa para criar, gerenciar e armazenar chaves privadas, públicas e certificados X.509. Funciona em Linux, Mac e Linux.). Ele é capaz de gerenciar:

1) Certificados digitais X.509, certificate signing requests, certificate revocation list.
2) Chaves (assimétricas) privadas/públicas RSA, DSA e EC
3) Smart cards
https://www.hohnstaedt.de/xca/index.php/download

OpenSSL

Funciona apenas por linha de comando. Nele é possível gerar chaves públicas, privadas e certificados X.509.

https://www.openssl.org/

PuttyGen

PuttyGen funciona no Windows, Mac e Linux e é um criador de chaves, SSH-1 (RSA), SSH-2 (RSA) e SSH-2 (DSA). Ele salva as chaves privadas num formato próprio (ppk), mas consegue importá-las e exportá-las para os formatos padrão do OpenSSL (pem).

O PuTTYgen vem junto com o instalador .msi do PuTTY.
https://www.puttygen.com/
https://www.putty.org/

Quais são os tipos de arquivos usados no X.509 e nas chaves públicas privadas? Quais suas diferenças?

  • csr
  • pem
  • key
  • pkcs12, pfx, p12
  • der
  • cert, cer, crt
  • p7b, keystore
  • crl

O que é o Diffie-Helman?

Criando parâmetro Diffie-Helman
https://www.ibm.com/support/knowledgecenter/en/SSB27H_6.2.0/fa2ti_openssl_generate_dh_parms.html

Comandos úteis no OpenSSL

O OpenSSL é um dos principais softwares para criar e manipular certificados X.509. Aqui vai alguns comandos interessantes.

Como descobrir se uma chave privada deu origem a um certificado?

Os dois comandos abaixo irão retornar uma chave hash do tipo SHA256. Se ambos os hashes forem iguais, o certificado foi derivado da chave.

Gerando o hash da chave privada:

openssl pkey -in meusite_com.key -pubout -outform pem | sha256sum

Gerando o hash do certificado:

openssl x509 -in meusite_com.crt -pubkey -noout -outform pem | sha256sum

Descobrindo se um certificado foi realmente emitido por uma CA

Comando para casos onde CA emitiu diretamente o certificado (sem intermediários):

openssl verify -verbose -CAfile ca.pem  server.crt

Comando para casos onde há CAs intermediários:

# Para um intermediárioopenssl verify -verbose -CAfile root-ca.pem -untrusted intermediate-ca.pem server.crt# Para dois intermediáriosopenssl verify -verbose -CAfile root-ca.pem -untrusted intermediate1-ca.pem -untrusted intermediate2-ca.pem server.crt

Referências

Um dos melhores tutoriais sobre certificados SSL/TLS
http://www.steves-internet-guide.com/ssl-certificates-explained/

Diferenças entre os tipos de arquivos em um certificado
https://knowledge.digicert.com/generalinformation/INFO4448.html

https://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file

Descobrindo origem de certificado a partir da chave privada
https://www.sslshopper.com/certificate-key-matcher.html

Como gerar um certificado de ca bundle?
https://cleantalk.org/help/ssl-ca-bundle

You should also read: