hacktricks/cryptography/certificates.md

16 KiB
Raw Blame History

Certificados

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:


Use Trickest para construir e automatizar fluxos de trabalho com facilidade, utilizando as ferramentas comunitárias mais avançadas do mundo.
Obtenha Acesso Hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

O que é um Certificado

Em criptografia, um certificado de chave pública, também conhecido como certificado digital ou certificado de identidade, é um documento eletrônico usado para comprovar a propriedade de uma chave pública. O certificado inclui informações sobre a chave, informações sobre a identidade do proprietário (chamado de sujeito) e a assinatura digital de uma entidade que verificou o conteúdo do certificado (chamado de emissor). Se a assinatura for válida e o software que examina o certificado confiar no emissor, então ele pode usar essa chave para se comunicar de forma segura com o sujeito do certificado.

Em um esquema típico de infraestrutura de chave pública (PKI), o emissor do certificado é uma autoridade de certificação (CA), geralmente uma empresa que cobra dos clientes para emitir certificados para eles. Em contraste, em um esquema de teia de confiança, indivíduos assinam diretamente as chaves uns dos outros, em um formato que desempenha uma função semelhante a um certificado de chave pública.

O formato mais comum para certificados de chave pública é definido por X.509. Como X.509 é muito geral, o formato é ainda mais restrito por perfis definidos para certos casos de uso, como Infraestrutura de Chave Pública (X.509) conforme definido no RFC 5280.

Campos Comuns x509

  • Número da Versão: Versão do formato x509.
  • Número de Série: Usado para identificar unicamente o certificado dentro dos sistemas de uma CA. Em particular, isso é usado para rastrear informações de revogação.
  • Sujeito: A entidade a qual um certificado pertence: uma máquina, um indivíduo ou uma organização.
  • Nome Comum: Domínios afetados pelo certificado. Pode ser 1 ou mais e pode conter curingas.
  • País (C): País
  • Nome Distinto (DN): O sujeito completo: C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net
  • Localidade (L): Localidade
  • Organização (O): Nome da organização
  • Unidade Organizacional (OU): Divisão de uma organização (como "Recursos Humanos").
  • Estado ou Província (ST, S ou P): Lista de nomes de estados ou províncias
  • Emissor: A entidade que verificou as informações e assinou o certificado.
  • Nome Comum (CN): Nome da autoridade de certificação
  • País (C): País da autoridade de certificação
  • Nome Distinto (DN): Nome distinto da autoridade de certificação
  • Localidade (L): Localidade onde a organização pode ser encontrada.
  • Organização (O): Nome da organização
  • Unidade Organizacional (OU): Divisão de uma organização (como "Recursos Humanos").
  • Não Antes: A data e hora mais cedo em que o certificado é válido. Geralmente definido para algumas horas ou dias antes do momento em que o certificado foi emitido, para evitar problemas de desvio de relógio.
  • Não Depois: A data e hora após a qual o certificado não é mais válido.
  • Chave Pública: Uma chave pública pertencente ao sujeito do certificado. (Esta é uma das partes principais, pois é o que é assinado pela CA)
  • Algoritmo da Chave Pública: Algoritmo usado para gerar a chave pública. Como RSA.
  • Curva da Chave Pública: A curva usada pelo algoritmo de chave pública de curva elíptica (se aplicável). Como nistp521.
  • Expoente da Chave Pública: Expoente usado para derivar a chave pública (se aplicável). Como 65537.
  • Tamanho da Chave Pública: O tamanho do espaço da chave pública em bits. Como 2048.
  • Algoritmo de Assinatura: O algoritmo usado para assinar o certificado de chave pública.
  • Assinatura: Uma assinatura do corpo do certificado pela chave privada do emissor.
  • extensões x509v3
  • Uso da Chave: Os usos criptográficos válidos da chave pública do certificado. Valores comuns incluem validação de assinatura digital, ciframento de chave e assinatura de certificado.
  • Em um certificado Web, isso aparecerá como uma extensão X509v3 e terá o valor Assinatura Digital
  • Uso Estendido da Chave: As aplicações nas quais o certificado pode ser usado. Valores comuns incluem autenticação de servidor TLS, proteção de e-mail e assinatura de código.
  • Em um certificado Web, isso aparecerá como uma extensão X509v3 e terá o valor Autenticação de Servidor Web TLS
  • Nome Alternativo do Sujeito: Permite que os usuários especifiquem nomes de host adicionais para um único certificado SSL. O uso da extensão SAN é prática padrão para certificados SSL e está a caminho de substituir o uso do nome comum.
  • Restrição Básica: Esta extensão descreve se o certificado é um certificado de CA ou um certificado de entidade final. Um certificado de CA é algo que assina certificados de outros e um certificado de entidade final é o certificado usado em uma página da web, por exemplo (a última parte da cadeia).
  • Identificador de Chave do Sujeito (SKI): Esta extensão declara um identificador único para a chave pública no certificado. É obrigatório em todos os certificados de CA. As CAs propagam seu próprio SKI para a extensão Identificador de Chave do Emissor (AKI) nos certificados emitidos. É o hash da chave pública do sujeito.
  • Identificador de Chave da Autoridade: Contém um identificador de chave que é derivado da chave pública no certificado do emissor. É o hash da chave pública do emissor.
  • Acesso à Informação da Autoridade (AIA): Esta extensão contém no máximo dois tipos de informações:
  • Informações sobre como obter o emissor deste certificado (método de acesso ao emissor da CA)
  • Endereço do responder OCSP de onde a revogação deste certificado pode ser verificada (método de acesso OCSP).
  • Pontos de Distribuição de CRL: Esta extensão identifica a localização da CRL de onde a revogação deste certificado pode ser verificada. O aplicativo que processa o certificado pode obter a localização da CRL a partir desta extensão, baixar a CRL e então verificar a revogação deste certificado.
  • CT Precertificate SCTs: Logs de Transparência de Certificado em relação ao certificado

Diferença entre OCSP e Pontos de Distribuição de CRL

OCSP (RFC 2560) é um protocolo padrão que consiste em um cliente OCSP e um respondedor OCSP. Este protocolo determina o status de revogação de um dado certificado de chave pública digital sem ter que baixar a CRL inteira.
CRL é o método tradicional de verificar a validade do certificado. Uma CRL fornece uma lista de números de série de certificados que foram revogados ou não são mais válidos. As CRLs permitem que o verificador verifique o status de revogação do certificado apresentado durante a verificação. As CRLs são limitadas a 512 entradas.
De aqui.

O que é Transparência de Certificado

Transparência de Certificado visa remediar ameaças baseadas em certificados tornando a emissão e existência de certificados SSL abertos ao escrutínio por proprietários de domínios, CAs e usuários de domínios. Especificamente, a Transparência de Certificado tem três objetivos principais:

  • Tornar impossível (ou pelo menos muito difícil) para uma CA emitir um certificado SSL para um domínio sem que o certificado esteja visível para o proprietário desse domínio.
  • Fornecer um sistema aberto de auditoria e monitoramento que permite a qualquer proprietário de domínio ou CA determinar se certificados foram emitidos erroneamente ou maliciosamente.
  • Proteger os usuários (tanto quanto possível) de serem enganados por certificados que foram emitidos erroneamente ou maliciosamente.

Logs de Certificados

Logs de certificados são serviços de rede simples que mantêm registros de certificados assegurados criptograficamente, publicamente auditáveis e apenas de adição. Qualquer um pode submeter certificados a um log, embora as autoridades de certificação provavelmente sejam os principais submissores. Da mesma forma, qualquer um pode consultar um log para uma prova criptográfica, que pode ser usada para verificar se o log está se comportando corretamente ou verificar se um certificado específico foi registrado. O número de servidores de log não precisa ser grande (digamos, muito menos que mil em todo o mundo), e cada um pode ser operado independentemente por uma CA, um ISP ou qualquer outra parte interessada.

Consulta

Você pode consultar os logs de Transparência de Certificado de qualquer domínio em https://crt.sh/.

Formatos

Existem diferentes formatos que podem ser usados para armazenar um certificado.

Formato PEM

  • É o formato mais comum usado para certificados
  • A maioria dos servidores (Ex: Apache) espera que os certificados e a chave privada estejam em arquivos separados
    - Geralmente são arquivos ASCII codificados em Base64
    - Extensões usadas para certificados PEM são .cer, .crt, .pem, .key
    - Apache e servidores semelhantes usam certificados no formato PEM

Formato DER

  • O formato DER é a forma binária do certificado
  • Todos os tipos de certificados e chaves privadas podem ser codificados no formato DER
  • Certificados formatados em DER não contêm as declarações "BEGIN CERTIFICATE/END CERTIFICATE"
  • Certificados formatados em DER usam mais frequentemente as extensões .cer e '.der'
  • DER é tipicamente usado em Plataformas Java

Formato P7B/PKCS#7

  • O formato PKCS#7 ou P7B é armazenado em formato ASCII Base64 e tem uma extensão de arquivo de .p7b ou .p7c
  • Um arquivo P7B contém apenas certificados e certificados de cadeia (CAs Intermediárias), não a chave privada
  • As plataformas mais comuns que suportam arquivos P7B são Microsoft Windows e Java Tomcat

Formato PFX/P12/PKCS#12

  • O formato PKCS#12 ou PFX/P12 é um formato binário para armazenar o certificado do servidor, certificados intermediários e a chave privada em um único arquivo criptografável
  • Esses arquivos geralmente têm extensões como .pfx e .p12
  • Eles são tipicamente usados em máquinas Windows para importar e exportar certificados e chaves privadas

Conversões de formatos

Converter x509 para PEM

openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem

Converter PEM para DER

openssl x509 -outform der -in certificatename.pem -out certificatename.der

Converter DER para PEM

openssl x509 -inform der -in certificatename.der -out certificatename.pem

Converter PEM para P7B

Nota: O formato PKCS#7 ou P7B é armazenado em formato ASCII Base64 e possui uma extensão de arquivo .p7b ou .p7c. Um arquivo P7B contém apenas certificados e cadeias de certificados (CAs Intermediários), não a chave privada. As plataformas mais comuns que suportam arquivos P7B são Microsoft Windows e Java Tomcat.

openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer

Converter PKCS7 para PEM

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

Converter pfx para PEM

Nota: O formato PKCS#12 ou PFX é um formato binário para armazenar o certificado do servidor, certificados intermediários e a chave privada em um único arquivo criptografável. Arquivos PFX geralmente possuem extensões como .pfx e .p12. Arquivos PFX são tipicamente usados em máquinas Windows para importar e exportar certificados e chaves privadas.

openssl pkcs12 -in certificatename.pfx -out certificatename.pem

Converter PFX para PKCS#8
Nota: Isso requer 2 comandos

1- Converter PFX para PEM

openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem

2- Converter PEM para PKCS8

openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8

Converter P7B para PFX
Nota: Isso requer 2 comandos

1- Converter P7B para CER

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer

2- Converter CER e Chave Privada para PFX

openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile  cacert.cer


Use Trickest para construir e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Obtenha Acesso Hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Aprenda a hackear AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: