Se tiveres uma compreensão sólida do que é um certificado X509, levanta a mão. Agora que reconhecemos que ninguém está a levantar a mão, vamos mudar isso.
Certificados são um tópico complexo e muitas vezes mal compreendido. Este tutorial tem como objetivo mudar isso ao mostrar exemplos de certificados X509, demonstrar certificados PKI e muito mais.
Neste artigo, terás uma boa visão geral dos certificados X509. No final, vais entender como funcionam a um nível elevado. Não te tornarás um perito num único artigo, mas pelo menos ficarás familiarizado com a terminologia apropriada até ao final deste artigo.
Relacionado: Gerir Certificados com o Windows Certificate Manager e PowerShell
Chaves Públicas e Privadas: Protegendo Ativos
Qualquer explicação sobre certificados X509 estaria incompleta sem mencionar primeiro as chaves. Pode ter ouvido falar do conceito de chaves quando termos como privadas e públicas são mencionados. Mas o que é exatamente uma chave e como se relaciona com certificados?
Para facilitar a conexão, vamos explicar o conceito de chaves em termos de uma fechadura de porta à moda antiga.
Quando compras uma nova fechadura de porta, essa fechadura vem com uma chave. Essa chave é única para essa fechadura, para que mais ninguém consiga abri-la.
Pense na própria fechadura como uma chave pública. Quando instalada, você, sua família ou transeuntes podem ver a fechadura na sua porta. Qualquer um pode ver e até tentar destrancá-la, mas não terão sucesso. Para destrancá-la, precisariam inserir a chave de porta única que veio originalmente com a fechadura. A chave única que veio com a fechadura é a chave privada.
A chave privada e pública juntas são chamadas de um par de chaves.
Troca de Chaves
Quando a chave de porta é inserida na fechadura, pode-se pensar nessa ação como uma troca de chaves. A chave privada (chave de porta) precisa ser trocada pela chave pública (fechadura) para destrancar a porta.
No mundo da criptografia, você dará livremente uma chave pública e manterá a chave privada para si mesmo. Afinal, você não se importa quem vê a fechadura, mas certamente se importa com quem pode destrancá-la (trocar chaves).
Existem algumas maneiras diferentes de trocar chaves, chamadas algoritmos de troca de chaves. Os algoritmos de troca de chaves focam em derivar e transmitir de forma segura um segredo compartilhado único.
Dois algoritmos de troca de chaves populares que você pode ter ouvido falar são o Diffie-Hellman (DH) e o Diffie-Hellman de Curva Elíptica (ECDH).
Confiança na Chave
Se você precisa que alguém entre pela porta, você lhes daria a chave (ou uma cópia da chave original e única). Você só dá sua chave para aqueles em quem confia. A pessoa que detém a chave privada (chave de porta) foi confiada para destrancar a fechadura da porta (chave pública).
Uso da Chave
A utilização da chave define o propósito do certificado X509, isso está alinhado com os algoritmos que o certificado irá usar. A utilização estendida da chave (EKU) define os propósitos pretendidos para a chave pública além da utilização da chave.
Certificados X509: “Recipientes” de Chave Pública
Como as chaves privadas e públicas se relacionam com o conceito de um certificado X509? Pense em um certificado como sendo simplesmente uma chave pública. Um certificado é o “invólucro” que contém uma chave pública juntamente com algumas outras informações sobre a chave, como para quem a chave pública foi emitida, quem assinou a chave, entre outros. Os certificados são armazenados na forma de arquivos.
Mais adiante, abordaremos alguns bons exemplos de certificados X509.
Você já viu algum arquivo com extensão de arquivo PEM ou CER? Esses são certificados (chaves públicas). Você aprenderá mais sobre esses formatos um pouco mais adiante.
A chave pública por si só não é necessariamente um certificado por definição. É a chave pública e os dados de atributo associados combinados que definem um certificado.
A certificate provides a standardized and secure format to communicate with specific systems along with the attributes to help validate a key pair trust. How certificates are built are defined within the X.509 standards, as you will read about later.
Impressão digital: Um Identificador Único do Certificado
Cada certificado X509 destina-se a fornecer a identificação de um único sujeito. O certificado deve garantir que cada chave pública seja unicamente identificável.
A certificate thumbprint or fingerprint is a way to identify a certificate, that is shorter than the entire public key. Technically, a serial number is as well but you’ll learn about that when it comes to certification authorities (CAs). The thumbprint is a hash of a DER-encoded certificate in Windows.
O conceito de identificar um conjunto de dados maior por um identificador único menor é o tópico geral de computação de impressões digitais. O blog de Morgan Simonson aprofunda-se na impressão digital.
Assunto: Definindo Atributos Importantes do Certificado X509
Cada certificado X509 precisa não apenas ter um identificador único, mas também responder a perguntas como abaixo. O assunto do certificado deve fazer exatamente isso.
- Quem deve usar este certificado?
- Qual organização deve ser confiada?
- Qual usuário deve apresentar este certificado?
O assunto é, sem dúvida, a parte mais importante de um certificado. O assunto deve ter atributos, definidos pelo X.500, que representam quem ou o que o certificado é emitido. É representado em um formato de nome distinto (DN).
A certificate subject is a string value that has a corresponding attribute type. For example, the DN for State or Province is st. This attribute type contains the full name of the state or province the subject resides in (e.g. ST=California).
Esses tipos de atributos e formatos de valor são definidos pelas recomendações do ITU-T X.520. Uma referência adicional é o RFC 4519 para recomendações específicas de tipos de atributos e formatos de valor.
Já que os padrões do certificado X509 não são regras, apenas sugestões fortes, muitas pessoas usam seu próprio julgamento ao definir um assunto. O assunto deve identificar especificamente a entidade final que você confia. Se o assunto não representar isso, como você pode confiar em qualquer coisa que use a chave pública apresentada?
De outra forma, se você permitir que várias pessoas usem o mesmo nome de usuário para acessar um sistema, você não pode responsabilizar nenhuma pessoa específica por suas ações. Essa prática complica o modelo de confiança com o qual os certificados devem estar alinhados.
Você pode ver um exemplo de como o Windows representa um certificado X509 e mais especificamente o assunto do certificado na captura de tela abaixo.

Visualizando os atributos de um certificado com o Cryptext.dll.
Nome alternativo do assunto (SAN)
A SAN is a certificate extension that allows you to use one certificate for multiple subjects that’s typically identified with a Subject Key Identifier (SKI). The example below shows some of the SANs Google uses. Adding more domains to a certificate essentially tells the certificate to trust each subject to use the same private key.
A SAN can also have several types other than DNS names called GeneralNames. GeneralNames require the client reading the certificate to support SANs using GeneralNames. Most clients such as web browsers only focus on the DNS name SAN.
Você pode ver o SAN abaixo neste exemplo de certificado X509.

Alguns dos atributos do SAN associados ao certificado do Google.
Compreensão da codificação
Nós usamos muitas línguas para nos comunicar uns com os outros, da mesma forma que os computadores têm sua própria linguagem. Essa linguagem é binária e diferentes métodos de codificação são usados para tornar o binário mais utilizável para outros, assim como traduziríamos o inglês para outros idiomas.
A codificação serve a um propósito específico. A codificação permite que os valores de extensão legíveis por humanos sejam armazenados de forma que os computadores também possam utilizá-los. Os formatos de codificação facilitam o armazenamento e a transferência de certificados X509, mas também nos permitem ler seus conteúdos.
Os computadores são bons em trabalhar com números inteiros, a codificação permite que você converta valores numéricos em valores alfanuméricos ou até mesmo em blocos binários. Essa conversão é fundamental para trabalhar com computadores e os certificados dependem da codificação para transmitir corretamente as informações adequadas aos computadores. Os formatos de codificação definem os padrões para realizar essas conversões.
- ASN.1 – O padrão de Notação de Sintaxe Abstrata Um é o formato de serialização para cada um dos campos dentro dos certificados.
- ASCII – O Código Padrão Americano para Intercâmbio de Informações (ASCII) define um valor binário para cada um dos caracteres de controle de computador e caracteres imprimíveis usados na maioria das comunicações legíveis por humanos.
- Base64 – Base64 define um esquema para codificar conteúdo binário dentro do conjunto de caracteres ASCII. Esses são os certificados que você pode abrir em um editor de texto e ver “INICIAR CERTIFICADO” ou outro texto de referência.
- DER – Distinguished Encoding Rules (DER) define outro esquema de codificação especificamente para dados ASN.1 como octetos sequenciais. A consideração importante com DER é que a saída codificada não é visível como ASCII.
Você pode ver abaixo a diferença nos esquemas de codificação. Observe que o arquivo certificate.crt exibido primeiro tem um -----INICIAR CERTIFICADO-----
, seguido por uma série de letras e números aleatórios e termina com -----FIM DO CERTIFICADO-----
. Todos os caracteres são legíveis por humanos. O primeiro certificado está codificado em Base64.
Agora, dê uma olhada no segundo exemplo do arquivo certificate.cer. O conteúdo deste arquivo parece muito diferente do certificado Base64. Este certificado X509 é codificado em DER.

Diferença entre arquivos codificados em Base64 e DER.
Compreensão dos Tipos de Arquivos de Certificado X509
Lembre-se de que um certificado não passa de uma chave pública com alguns metadados representados como um arquivo. Você encontrará muitos tipos diferentes de arquivos por aí representando diferentes tipos de certificados. Cada tipo de arquivo é diferenciado pela sua extensão de arquivo. Quando nos referimos a um arquivo KEY, por exemplo, estamos nos referindo à sua extensão de arquivo.
Abaixo, você encontrará todos os tipos comuns de certificados definidos pela sua extensão de arquivo com os quais você pode trabalhar e seus propósitos.
Na lista abaixo, você notará várias referências ao PKCS. PKCS, ou Public Key Cryptography Standards, é um conjunto de padrões que define como vários certificados são criados. Para obter mais informações, confira este informativo artigo na Wikipedia.
- PFX – Esses são encontrados com mais frequência em um ambiente Windows, mas é um formato padrão independentemente do sistema operacional. Os arquivos PFX contêm um certificado, a chave pública e extensões, e uma chave privada criptografada com uma senha. O PFX é definido pelo padrão PKCS #12.
- P12 – Assim como o PFX, o P12 é definido pelo padrão PKCS #12. Formalmente, o PKCS #12 é o sucessor do formato PFX, embora ambos os tipos de arquivo representem o mesmo formato nas implementações criptográficas modernas.
- P7B – Um contêiner de certificados ASN.1, especificamente chaves públicas para todas as camadas de uma cadeia de autoridade de certificação, como você aprenderá abaixo. Um arquivo PKCS #7 fornece um único arquivo para distribuir várias chaves públicas, frequentemente usado para configurar manualmente uma confiança com CAs em uma PKI privada.
- P7C – O tipo de arquivo P7C é funcionalmente o mesmo que P7B, mas é simplesmente outra extensão comum usada para representar um arquivo PKCS #7.
- DER – Um arquivo DER é uma chave pública codificada em DER.
- CER – Uma chave pública é codificada em DER ou Base64. Um arquivo CER é geralmente codificado em DER.
- CRT – Um CRT é geralmente codificado em Base64, mas não há garantias.
- KEY – Um arquivo KEY muitas vezes é uma chave privada codificada em Base64, seja criptografada ou não.
- PEM – Uma referência a um certificado codificado em Base64, embora várias chaves possam estar em um único arquivo PEM, frequentemente há uma suposição de que o arquivo PEM tem uma chave privada. Mais comumente usado para um arquivo de chave privada PEM codificado em Base64 – seja criptografado ou não.
- CSR – Usado para enviar uma chave pública a uma CA para ser assinada e emitir campos adicionais, como um número de série, definido pelo PKCS #10. Na maioria dos casos, um CSR conterá a estrutura ASN.1 para a solicitação em codificação Base64.
- REQ – Usado no Windows para especificar as configurações de política de inscrição usadas ao gerar o CSR.
- CRL – Uma CRL é um arquivo específico que lista os certificados revogados por uma CA, seu estado de revogação e o motivo da revogação.
Infraestrutura de Chave Pública (PKI): O Ecossistema de Certificados X509
Recorda-se quando alguém segurava a chave da porta de uma fechadura. Naquele momento, você tinha apenas uma porta. Mas o que acontece quando de repente se encontra como senhorio de dezenas ou centenas de apartamentos? Gerenciar todas aquelas chaves das portas vai ficar complicado!
Além disso, os inquilinos não vão ficar naquele apartamento para sempre. Haverá algumas pessoas que guardam a chave ou fazem cópias não autorizadas. Você vai precisar trocar as fechaduras para evitar o acesso. Você não confia mais nos antigos inquilinos.
Se você precisa gerenciar centenas de apartamentos com inquilinos entrando e saindo constantemente, como você gerencia tudo isso? A resposta é uma Infraestrutura de Chave Pública (PKI).
A PKI é todo um ecossistema de funções, políticas e procedimentos construídos em torno da gestão de chaves públicas. A PKI representa um conjunto abrangente de muitas áreas diferentes de foco para distribuir, usar, gerenciar e remover certificados X509. É essencialmente tudo o que é necessário para lidar e gerenciar certificados em escala.
Nas próximas seções, vamos decompor muitos dos componentes mais comuns de uma PKI e explicar o papel de cada componente.
Autoridades Certificadoras (CAs): Seus Pais
A PKI is primarily built around the concept of managing trust. But since it’s not economical to directly manage hundreds or thousands of trust relationships, you need a mediator.
Você precisa de uma terceira parte que já tenha sido garantida pela parte original. Esses mediadores de terceiros são chamados de autoridades certificadoras (CAs) identificados por uma extensão de Identificadores de Chave de Autoridade (AKI) derivada da chave pública usada para assinar o certificado fornecido.
Pense em você como uma criança como um certificado X509. Provavelmente, você foi ensinado pelos seus pais a não confiar em estranhos. Mas e se seus pais (aqueles em quem você confia) te apresentarem a um estranho e disserem que está tudo bem confiar neles? Você provavelmente concordaria e confiaria no estranho. Afinal, se seus pais confiam neles, você também pode.
A CA plays the role of your parents. You trust your parents (a CA) and they introduce you to strangers. They do so by signing the stranger’s public key to let you know that you can trust them.
O papel principal de uma AC é atuar como mediador confiável.
Emitindo Certificados X509: Estabelecendo Confiança
Ao ser uma entidade confiável conhecida, uma AC possibilita a confiança entre partes indiretas. Para possibilitar a confiança entre as partes, uma AC “emite” certificados. Quando falamos sobre uma AC emitindo, realmente queremos dizer que a AC está validando as extensões solicitadas e anexando extensões geradas pela AC para criar um certificado.
Quando uma AC emite um certificado X509, ela usará sua própria chave privada para assinar digitalmente a chave pública do certificado. Através do processo de assinatura, uma AC está marcando o certificado de forma a informar a todos que confia nesta chave pública. O DocuSign fornece uma boa visão geral deste conceito específico com um bom diagrama.
Outro exemplo de uma extensão gerada pela AC é o número serial para cada certificado, e cada número serial precisa ser único para essa AC específica de acordo com as especificações de design do RFC.
Um exemplo de confiança não intencional nas notícias modernas é o uso malicioso de PKIs com \texttt{malware}. Onde os criadores recebiam certificados válidos que são implicitamente confiáveis pela maioria dos sistemas, tornando mais difícil para seus sistemas identificar os binários de malware como maliciosos.\texttt{
}Revogação de Certificados X509: Removendo Confiança\texttt{
}A AC também é responsável por revogar certificados X509 que não devem mais ser confiáveis. Essas revogações são publicadas pela AC em uma Lista de Revogação de Certificados (CRL). A revogação é uma maneira para as ACs invalidarem ativamente um certificado, em vez de esperar que a duração de validade expire.\texttt{
}A confiança é um componente crítico para que os certificados funcionem da maneira como foram projetados. Pontos de distribuição ajudam a garantir a confiança, fornecendo um ponto de referência onde o certificado e as listas de revogação podem ser baixados do emissor e usados para comparação com o certificado que você está utilizando.\texttt{
A CRL Distribution Point (CDP) supplies the protocols and locations to obtain CRLs. Updating CRLs is a passive revocation validation method, with pulling updates at scheduled intervals. Online Certificate Status Protocol (OCSP) actively requests the revocation status of a specific certificate by maintaining caches of the CRLs.
}Embora a validação de revogação por meio de CRLs ou OCSP esteja disponível, ela é implementada conforme a necessidade de suporte e aplicação do cliente, e nem sempre é o caso.\texttt{
}Hierarquização\texttt{
A PKI can be made up of multiple CAs or a single CA, these are commonly referred to as tiers.
}Encadeamento de Certificados X509\texttt{
}Como você aprendeu acima, a confiança é um ponto focal importante ao usar certificados. As partes envolvidas devem ser capazes de confiar ou validar um certificado emitido por uma AC confiável.\texttt{
A great example of how this scales is the The United States Federal PKI public documents. These provide a great reference into maintaining an inter-organization trust relationship using CAs.
}Assinatura de Certificado X509
Você frequentemente ouvirá falar de um conceito chamado assinatura de certificado, mas o que exatamente isso significa? Como você já aprendeu, certificados são tudo sobre confiança. Para estabelecer confiança, um certificado X509 é assinado por uma AC. Assinar um certificado atribui um hash criptográfico único a um certificado, informando a todas as partes que o leem que podem confiar nele. Foi assinado por uma AC confiável.
Em uma hierarquia de IPK, certificados são assinados por ACs, mas onde esses certificados são usados depende do tipo de AC que os assina.
Quando há uma única AC em uma IPK, essa AC é a raiz. Como nenhuma outra AC existe, essa AC precisa gerar seu próprio certificado autoassinado. Essa AC emite então certificados assinados por seu próprio certificado.
Se uma IPK tem mais de uma AC, todas as ACs são assinadas por uma AC raiz ou uma AC intermediária que se conecta à AC raiz.
Geralmente, quando um dispositivo usa a mesma chave privada que corresponde à chave pública ao gerar um certificado X509, isso é conhecido como um certificado autoassinado. No entanto, você também pode solicitar a uma AC que use sua própria chave privada para assinar seu certificado.
Algoritmos de Assinatura
Algoritmos de assinatura focam na validação da autenticidade de uma mensagem de um par remoto. Uma assinatura digital é um resumo de mensagem de uma função de hash criptografada com a chave privada do remetente. O destinatário descriptografa a assinatura digital usando uma cópia da chave pública do remetente. O destinatário pode então comparar o resumo da mensagem recebida com o resumo descriptografado da assinatura digital. Quando os resumos coincidem, a autenticidade da mensagem é válida.
A criptografia assimétrica é a capacidade de gerar texto cifrado sem o uso de um segredo previamente conhecido. A combinação de um algoritmo de troca de chaves com um algoritmo de assinatura é a base da criptografia assimétrica.
Abaixo estão os principais algoritmos usados para assinaturas digitais.
- Rivest–Shamir–Adleman (RSA)
- Algoritmo de Assinatura Digital (DSA)
- DSA de Curva Elíptica (ECDSA)
Solicitações de Certificado de Assinatura (CSRs)
As CA emitentes usam Solicitações de Certificado de Assinatura (CSR) que permitem que os clientes enviem chaves públicas para as CAs para emissão. Uma CA aceita um CSR e emitirá certificados X509 assinados com base nas políticas de emissão configuradas. Ou seja, cada CA em que você confia também implica confiança nas chaves públicas que ela assina.
Hashing
O hashing é um tópico complexo, e nem mesmo tentarei fazer justiça a ele neste post. A equipe do Computerphile tem uma boa visão geral em seu canal no YouTube. O hashing foca em pegar um objeto de entrada e criar um hash de saída único para essa entrada única. O hash de saída é conhecido como digest. Ou seja, mudar o objeto de entrada de alguma forma criará um digest único e não relacionado diferente.
Implementações modernas se concentrarão em algoritmos Secure Hash Algorithm (SHA) 2. Como observação, SHA 256, SHA 384 e SHA 512 são conhecidos como SHA 2.
Abaixo está uma lista de algoritmos de hashing comuns que você verá.
- SHA 256
- SHA 384
- SHA 512
- Resumo da Mensagem Digest (MD) 5
Políticas de Certificado
A extensão de Políticas de Certificado (CP) fornece a referência à organização que mantém a AC, documentando suas políticas reais para a PKI fornecida e deve estar alinhada como uma Declaração de Prática de Certificação (CPS), que fornece a política da organização para manter a PKI fornecida.
Pontos de Distribuição
Outro tipo de ponto de distribuição identificado em certificados são os Acessos à Informação da Autoridade (AIA). Esses AIA fornecem os protocolos e locais para obter cópias das informações dos emissores de certificados, mais comumente significa a chave pública da AC emissora.
Resumo
Esperamos que agora, quando lhe fizerem uma pergunta como no início deste artigo, você se sinta mais à vontade para levantar a mão, devagar. Honestamente, esperamos que este artigo tenha ajudado a entender as complexidades com certificados X509 e na implementação desses padrões pelo Windows. Enquanto ajudamos a entender alguns dos componentes básicos que o auxiliarão no futuro ao lidar com certificados.
Pelo menos agora, quando alguém pedir a chave pública do seu certificado, você pode confirmar que desejam DER ou Base64 codificado, e eles não saberão, então você ainda enviará ambos, independentemente.