Introdução
Neste laboratório, você explorará os fundamentos da Infraestrutura de Chave Pública (PKI - Public Key Infrastructure), o sistema que sustenta grande parte da segurança na internet, incluindo o HTTPS. PKI é um conjunto de papéis, políticas, hardware, software e procedimentos necessários para criar, gerenciar, distribuir, usar, armazenar e revogar certificados digitais, além de gerenciar a criptografia de chave pública.
Você terá experiência prática com a ferramenta de linha de comando openssl para executar as funções centrais de uma PKI. Você atuará como sua própria Autoridade Certificadora (CA), emitirá um certificado para um servidor web, verificará a cadeia de confiança do certificado e, finalmente, revogará o certificado. Todas as operações serão realizadas dentro do diretório ~/project.
Compreendendo os Fundamentos da PKI
Nesta etapa, abordaremos os conceitos fundamentais da PKI. Não há comandos para executar nesta etapa; o objetivo é construir uma base teórica sólida antes de começarmos a prática.
Infraestrutura de Chave Pública (PKI)
PKI é uma estrutura projetada para aumentar a segurança em comunicações eletrônicas. Ela utiliza criptografia de chave pública para vincular chaves públicas às respectivas identidades de usuário por meio de uma Autoridade Certificadora (CA - Certificate Authority). Esse vínculo é estabelecido através de um processo de registro e emissão.
Autoridade Certificadora (CA)
Uma Autoridade Certificadora é uma entidade confiável que emite certificados digitais. A CA atua como uma terceira parte confiável, sendo confiável tanto pelo sujeito (proprietário) do certificado quanto pela parte que confia no certificado. O papel principal da CA é assinar digitalmente e publicar a chave pública vinculada a um determinado usuário.
Certificado Digital
Um certificado digital é um documento eletrônico (frequentemente seguindo o padrão X.509) que contém:
- A chave pública do proprietário.
- As informações de identificação do proprietário (como um nome ou nome de host).
- As informações e a assinatura digital da entidade emissora (CA).
- Um período de validade (data de início e fim).
- Um número de série exclusivo.
A assinatura da CA no certificado atesta que a chave pública contida no certificado pertence à entidade nomeada no certificado.
Cadeia de Confiança (Trust Chain)
Uma cadeia de confiança (ou cadeia de certificados) é uma sequência de certificados, começando por um certificado de entidade final (por exemplo, para example.com) e terminando em um certificado de CA Raiz (Root CA).
- Certificado de CA Raiz (Root CA Certificate): Este é um certificado autoassinado da autoridade máxima, a CA Raiz. Esses certificados são pré-instalados no "repositório de confiança" (trust store) do seu navegador ou sistema operacional.
- Certificado(s) de CA Intermediária (Intermediate CA Certificate(s)): CAs grandes frequentemente usam CAs intermediárias para emitir certificados a usuários finais, protegendo a chave raiz. Um certificado intermediário é assinado pela CA Raiz.
- Certificado de Entidade Final (End-Entity Certificate): Este é o certificado emitido para um servidor ou usuário específico. Ele é assinado por uma CA intermediária (ou diretamente pela CA Raiz em configurações mais simples).
Quando seu navegador recebe o certificado de um servidor, ele verifica a assinatura checando o certificado da entidade emissora. Ele segue essa cadeia até atingir uma CA Raiz que já está em seu repositório de confiança. Se a cadeia for válida e todas as assinaturas estiverem corretas, o servidor é considerado confiável.
Na próxima etapa, você criará sua própria CA Raiz.
Criar uma Autoridade Certificadora
Nesta etapa, você atuará como uma Autoridade Certificadora (CA) e criará seus componentes fundamentais: uma chave privada e um certificado raiz autoassinado. Todos os comandos serão executados no terminal, e todos os arquivos serão criados no seu diretório atual, ~/project.
Primeiro, gere a chave privada da CA. Esta chave é o segredo mais crítico da PKI; ela é usada para assinar todos os certificados emitidos pela CA.
openssl genpkey -algorithm RSA -out ca.key
Em seguida, você criará um certificado raiz autoassinado. Um certificado raiz é autoassinado porque é a âncora final de confiança; não há autoridade superior para assiná-lo.
Execute o seguinte comando para gerar o certificado. Usamos o argumento -subj para fornecer as informações do sujeito do certificado de forma não interativa.
openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.pem -subj "/C=US/ST=California/L=MountainView/O=MyLab/CN=MyLabRootCA"
Vamos analisar este comando:
req: Utilidade para geração de Solicitação de Assinatura de Certificado (CSR - Certificate Signing Request) e certificado.-x509: Gera um certificado autoassinado em vez de uma CSR.-new: Cria um novo certificado.-nodes: "No DES", o que significa que a chave privada não será criptografada com uma senha (passphrase). Isso é feito por simplicidade em nosso laboratório.-key ca.key: Especifica a chave privada a ser usada para assinatura.-sha256: Usa o algoritmo de hash SHA-256 para a assinatura.-days 365: Define o período de validade do certificado para 365 dias.-out ca.pem: Especifica o arquivo de saída para o novo certificado.-subj "/C=.../CN=...": Fornece os detalhes do sujeito.CN(Common Name) é a identidade principal, que para uma CA é o seu nome.
Agora você tem uma chave privada de CA (ca.key) e um certificado raiz (ca.pem). Você pode inspecionar o conteúdo do seu novo certificado de CA:
openssl x509 -in ca.pem -text -noout
Percorra a saída e observe que os campos Issuer (Emissor) e Subject (Sujeito) são idênticos, confirmando que ele é autoassinado.
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
...
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = California, L = MountainView, O = MyLab, CN = MyLabRootCA
Validity
Not Before: ...
Not After : ...
Subject: C = US, ST = California, L = MountainView, O = MyLab, CN = MyLabRootCA
Subject Public Key Info:
...
Emitir um Certificado de Servidor
Nesta etapa, você simulará um proprietário de servidor solicitando um certificado. Você gerará uma chave privada e uma Solicitação de Assinatura de Certificado (CSR - Certificate Signing Request) para o servidor e, em seguida, usará sua CA da etapa anterior para assinar a CSR e emitir um certificado válido.
Primeiro, gere uma chave privada para o servidor. Esta chave deve ser mantida em segredo no próprio servidor.
openssl genpkey -algorithm RSA -out server.key
Em seguida, crie uma Solicitação de Assinatura de Certificado (CSR). Uma CSR é um bloco de texto codificado contendo a chave pública e outras informações que serão incluídas no certificado, como o nome da organização e o nome de domínio. A CSR é enviada à CA para assinatura.
openssl req -new -key server.key -out server.csr -subj "/C=US/ST=California/L=MountainView/O=MyWebServer/CN=example.com"
Observe que, para um certificado de servidor, o CN (Common Name) deve corresponder ao nome de domínio do servidor, neste caso, example.com.
Agora, agindo como a CA, você assinará a CSR do servidor (server.csr) com a chave privada da sua CA (ca.key). Esta ação cria o certificado final do servidor (server.crt).
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.crt -days 300 -sha256
Vamos revisar as novas opções:
x509 -req: Isso instrui o OpenSSL a processar uma CSR.-in server.csr: O arquivo CSR de entrada.-CA ca.pem: O certificado da CA a ser usado como emissor.-CAkey ca.key: A chave privada da CA para assinatura.-CAcreateserial: Isso cria e gerencia um arquivo de número de série (ca.srl), que é necessário para garantir que cada certificado emitido pela CA tenha um número de série exclusivo.-days 300: A validade para o certificado do servidor. Isso deve ser menor do que a validade do certificado da CA.
Finalmente, inspecione o certificado de servidor recém-criado.
openssl x509 -in server.crt -text -noout
Na saída, observe os campos Issuer (Emissor) e Subject (Sujeito). O Issuer deve ser sua CA (MyLabRootCA), e o Subject deve ser seu servidor (example.com). Isso confirma que o certificado foi emitido corretamente pela sua CA.
Certificate:
Data:
Version: 3 (0x2)
Serial Number: ...
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = California, L = MountainView, O = MyLab, CN = MyLabRootCA
Validity
Not Before: ...
Not After : ...
Subject: C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
...
Signature Algorithm: sha256WithRSAEncryption
...
Verificar Cadeia de Certificados
Nesta etapa, você aprenderá como verificar uma cadeia de certificados. Este é o processo que um cliente (como um navegador web) executa para determinar se o certificado de um servidor é confiável. O cliente verifica se o certificado foi assinado por uma CA em que ele confia.
Você pode usar o comando openssl verify para realizar essa verificação. Você precisa informar ao OpenSSL quais CAs você confia, fornecendo o certificado raiz.
Execute o seguinte comando para verificar o server.crt em relação ao seu certificado raiz ca.pem:
openssl verify -CAfile ca.pem server.crt
A saída deve ser:
server.crt: OK
Este status OK confirma que:
- O certificado
server.crtfoi de fato assinado pela chave privada correspondente à chave pública emca.pem. - O certificado não expirou.
Agora, vamos ver o que acontece se o verificador não tiver nossa CA na sua lista de CAs confiáveis. Você pode simular isso executando o comando verify sem a opção -CAfile.
openssl verify server.crt
Desta vez, o comando falhará com um erro semelhante a este:
C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error server.crt: verification failed
O erro "unable to get local issuer certificate" (incapaz de obter o certificado do emissor local) significa que o sistema não conseguiu encontrar o certificado do emissor (MyLabRootCA) em seu repositório de confiança padrão (trust store). Isso demonstra por que é essencial que os clientes tenham o certificado da CA raiz para estabelecer uma cadeia de confiança.
Simular Revogação de Certificado
Nesta etapa, você aprenderá como revogar um certificado. A revogação é um processo crítico para quando a chave privada de um certificado é comprometida, ou o certificado não é mais necessário antes de sua expiração natural. Isso é gerenciado usando uma Lista de Revogação de Certificados (CRL - Certificate Revocation List).
Uma CRL é uma lista assinada digitalmente, emitida por uma CA, que contém os números de série de todos os certificados que ela revogou. Os clientes podem baixar a CRL para verificar se um certificado que receberam ainda é válido.
Para gerenciar a revogação, o openssl precisa de um pequeno arquivo de configuração para saber onde encontrar os arquivos de banco de dados da CA (index.txt e serial). O script de configuração para este laboratório já criou o diretório necessário (my-ca) e os arquivos. Agora, crie o arquivo de configuração.
Use o comando cat para criar my-ca.conf:
cat << EOF > my-ca.conf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./my-ca
database = \$dir/index.txt
serial = \$dir/serial
private_key = ca.key
certificate = ca.pem
default_md = sha256
policy = policy_anything
crl_extensions = crl_ext
default_crl_days = 30
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ crl_ext ]
authorityKeyIdentifier=keyid:always
EOF
Este arquivo de configuração informa ao OpenSSL como operar como uma Autoridade Certificadora. Veja o que cada seção faz:
default_ca = CA_default: Aponta para a seção de configuração principal da CA.dir = ./my-ca: Diretório de trabalho da CA para arquivos de banco de dadosdatabase = $dir/index.txt: Banco de dados de certificados (rastreia certificados emitidos/revogados)serial = $dir/serial: Arquivo de número de série para IDs de certificado exclusivosprivate_key = ca.key: Chave privada da CA para assinar certificadoscertificate = ca.pem: O próprio certificado da CAdefault_md = sha256: Algoritmo de hash para assinaturas (SHA-256)policy = policy_anything: Regras de validação de certificadocrl_extensions = crl_ext: Opções de formatação da CRLdefault_crl_days = 30: Período de validade da CRL (30 dias)countryName = optional: Código do paísstateOrProvinceName = optional: Estado/províncialocalityName = optional: Cidade/localizaçãoorganizationName = optional: Nome da organizaçãoorganizationalUnitName = optional: DepartamentocommonName = supplied: Nome do domínio/servidor (obrigatório)emailAddress = optional: Endereço de e-mailauthorityKeyIdentifier=keyid:always: Inclui o identificador da CA nas CRLs para verificação
Este arquivo de configuração é o "manual de operações" da sua CA. Ele informa ao OpenSSL onde encontrar chaves, como armazenar certificados e quais regras seguir para emitir e revogar certificados.
Agora, revogue o certificado do servidor (server.crt). Este comando procurará o número de série do certificado e o marcará como revogado no arquivo de banco de dados index.txt.
openssl ca -config my-ca.conf -revoke server.crt
Você verá uma saída confirmando a revogação.
Após a revogação, você deve gerar e publicar uma CRL atualizada.
openssl ca -config my-ca.conf -gencrl -out my-ca.crl
Isso cria o arquivo my-ca.crl, que contém a lista de certificados revogados.
Finalmente, vamos tentar verificar o certificado do servidor novamente, mas desta vez, também forneceremos a CRL. Um processo de verificação adequado deve verificar a revogação.
openssl verify -CAfile ca.pem -CRLfile my-ca.crl -crl_check server.crt
O comando agora falha com uma mensagem clara:
C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
error 23 at 0 depth lookup: certificate revoked
error server.crt: verification failed
O erro "certificate revoked" (certificado revogado) confirma que nosso processo de revogação foi bem-sucedido. O cliente, ao verificar a CRL, identificou corretamente que o certificado para example.com não é mais confiável.
Resumo
Parabéns! Você concluiu com sucesso este laboratório sobre os fundamentos da Infraestrutura de Chave Pública (PKI - Public Key Infrastructure). Você adquiriu experiência prática com as operações fundamentais que protegem as comunicações digitais.
Neste laboratório, você aprendeu a:
- Entender os conceitos centrais de PKI, Autoridades Certificadoras (CAs) e cadeias de confiança.
- Criar sua própria CA Raiz simples, gerando uma chave privada e um certificado autoassinado.
- Emitir um certificado de servidor assinando uma Solicitação de Assinatura de Certificado (CSR - Certificate Signing Request) com a chave da sua CA.
- Verificar a cadeia de confiança de um certificado usando o comando
openssl verify. - Revogar um certificado e confirmar seu status de revogado, gerando e utilizando uma Lista de Revogação de Certificados (CRL - Certificate Revocation List).
Estas habilidades são os blocos de construção para gerenciar sistemas seguros e entender como a confiança é estabelecida na internet.



