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ários openssl 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