Partilhar via


Certificados X.509

Os certificados X.509 são documentos digitais que representam um utilizador, computador, serviço ou dispositivo. Uma autoridade de certificação (AC), AC subordinada ou autoridade de registo emite certificados X.509. Os certificados contêm a chave pública do requerente do certificado. Não contêm a chave privada do requerente, que tem de ser armazenada de forma segura. O RFC 5280 documenta certificados de chave pública, incluindo os respetivos campos e extensões. Os certificados de chave pública são assinados digitalmente e normalmente contêm as seguintes informações:

  • Informações sobre o requerente do certificado
  • A chave pública que corresponde à chave privada do requerente
  • Informações sobre a AC emissora
  • Os algoritmos de encriptação e/ou assinatura digital suportados
  • Informações para determinar o estado de revogação e validade do certificado

Campos de certificado

Existem três versões incrementais do padrão de certificado X.509 e cada versão subsequente adicionou campos de certificado à norma:

  • A versão 1 (v1), publicada em 1988, segue a norma X.509 inicial para certificados.
  • A versão 2 (v2), publicada em 1993, adiciona dois campos aos campos incluídos na Versão 1.
  • A versão 3 (v3), publicada em 2008, representa a versão atual da norma X.509. Esta versão adiciona suporte para extensões de certificado.

Esta secção destina-se a ser uma referência geral para os campos de certificado e extensões de certificado disponíveis em certificados X.509. Para obter mais informações sobre campos de certificado e extensões de certificado, incluindo tipos de dados, restrições e outros detalhes, veja a especificação RFC 5280 .

Campos da Versão 1

A tabela seguinte descreve os campos de certificado da Versão 1 para certificados X.509. Todos os campos incluídos nesta tabela estão disponíveis em versões de certificado X.509 subsequentes.

Nome Descrição
Versão Um número inteiro que identifica o número da versão do certificado.
Número de Série Um número inteiro que representa o número exclusivo de cada certificado emitido por uma autoridade de certificação (AC).
Assinatura O identificador do algoritmo criptográfico utilizado pela AC para assinar o certificado. O valor inclui o identificador do algoritmo e quaisquer parâmetros opcionais utilizados por esse algoritmo, se aplicável.
Emissor O nome distinto (DN) da AC emissora do certificado.
Validade O período de tempo inclusivo para o qual o certificado é válido.
Assunto O nome distinto (DN) do requerente do certificado.
Informações da Chave Pública do Assunto A chave pública propriedade do requerente do certificado.

Campos da Versão 2

A tabela seguinte descreve os campos adicionados para a Versão 2, que contêm informações sobre o emissor de certificados. Estes campos são, no entanto, raramente utilizados. Todos os campos incluídos nesta tabela estão disponíveis em versões de certificado X.509 subsequentes.

Nome Descrição
ID Exclusivo do Emissor Um identificador exclusivo que representa a AC emissora, conforme definido pela AC emissora.
ID Exclusivo do Assunto Um identificador exclusivo que representa o requerente do certificado, conforme definido pela AC emissora.

Campos da Versão 3

A tabela seguinte descreve o campo adicionado para a Versão 3, que representa uma coleção de extensões de certificado X.509.

Nome Descrição
Extensões Uma coleção de extensões de certificados padrão e específicas da Internet. Para obter mais informações sobre as extensões de certificado disponíveis para certificados X.509 v3, veja Extensões de certificado.

Extensões de certificado

As extensões de certificado, introduzidas com a Versão 3, fornecem métodos para associar mais atributos a utilizadores ou chaves públicas e para gerir relações entre autoridades de certificação. Para obter mais informações sobre extensões de certificado, veja a secção Extensões de Certificado da especificação RFC 5280 .

Extensões padrão

A norma X.509 define as extensões incluídas nesta secção, para utilização na infraestrutura de chaves públicas (PKI) da Internet.

Nome Descrição
Identificador da Chave de Autoridade Um identificador que representa o requerente do certificado e o número de série do certificado de AC que emitiu este certificado ou um hash da chave pública da AC emissora.
Identificador de Chave do Requerente Um hash da chave pública do certificado atual.
Utilização de Chaves Um valor com bits que define os serviços para os quais um certificado pode ser utilizado.
Período de Utilização da Chave Privada O período de validade da parte da chave privada de um par de chaves.
Políticas do Certificado Uma coleção de informações de política, utilizada para validar o requerente do certificado.
Mapeamentos de Políticas Uma coleção de mapeamentos de políticas, cada um dos quais mapeia uma política numa organização para política noutra organização.
Nome Alternativo do Requerente Uma coleção de nomes alternativos para o assunto.
Nome Alternativo do Emissor Uma coleção de nomes alternativos para a AC emissora.
Atributos do Diretório de Assuntos Uma coleção de atributos de um diretório X.500 ou LDAP.
Restrições Básicas Uma coleção de restrições que permite ao certificado designar se é emitido para uma AC ou para um utilizador, computador, dispositivo ou serviço. Esta extensão também inclui uma restrição de comprimento do caminho que limita o número de ACs subordinadas que podem existir.
Restrições de Nomes Uma coleção de restrições que designam os espaços de nomes permitidos num certificado emitido pela AC.
Restrições de Política Uma coleção de restrições que podem ser utilizadas para proibir mapeamentos de políticas entre ACs.
Utilização Alargada da Chave Uma coleção de valores principais que indicam como a chave pública de um certificado pode ser utilizada, para além das finalidades identificadas na extensão Utilização da Chave .
Pontos de Distribuição CRL Uma coleção de URLs onde é publicada a lista de revogação de certificados base (CRL).
Inibir qualquer Política Inibe a utilização do OID de Todas as Políticas de Emissão (2.5.29.32.0) em certificados de AC subordinados
CRL mais recente Esta extensão, também conhecida como Ponto de Distribuição de CRL Delta, contém um ou mais URLs onde o CRL delta da AC emissora é publicado.

Extensões de Internet Privada

As extensões incluídas nesta secção são semelhantes às extensões padrão e podem ser utilizadas para direcionar as aplicações para informações online sobre a AC emissora ou o requerente do certificado.

Nome Descrição
Acesso a Informações de Autoridade Uma coleção de entradas que descrevem o formato e a localização de informações adicionais fornecidas pela AC emissora.
Acesso a Informações do Requerente Uma coleção de entradas que descrevem o formato e a localização de informações adicionais fornecidas pelo requerente do certificado.

Formatos de certificado

Os certificados podem ser guardados em vários formatos. Hub IoT do Azure autenticação utiliza normalmente os formatos Privacy-Enhanced Mail (PEM) e Personal Information Exchange (PFX). A tabela seguinte descreve os ficheiros e formatos utilizados frequentemente para representar certificados.

Formato Descrição
Certificado binário Um certificado binário de formulário não processado com a codificação ASN.1 do Distinguished Encoding Rules (DER).
Formato PEM ASCII Um ficheiro de certificado PEM (.pem) contém um certificado codificado em Base64 que começa com -----BEGIN CERTIFICATE----- e termina com -----END CERTIFICATE-----. Um dos formatos mais comuns para certificados X.509, o formato PEM é necessário para Hub IoT ao carregar determinados certificados, como certificados de dispositivo.
Chave PEM ASCII Contém uma chave DER codificada em Base64, opcionalmente com mais metadados sobre o algoritmo utilizado para a proteção de palavras-passe.
Certificado PKCS n.º 7 Um formato concebido para o transporte de dados assinados ou encriptados. Pode incluir toda a cadeia de certificados. RFC 2315 define este formato.
Tecla PKCS n.º 8 O formato de um arquivo de chaves privadas. O RFC 5208 define este formato.
Chave e certificado PKCS #12 Um formato complexo que pode armazenar e proteger uma chave e toda a cadeia de certificados. É frequentemente utilizado com uma extensão .p12 ou .pfx. O PKCS n.º 12 é sinónimo do formato PFX. RFC 7292 define este formato.

Certificados autoassinados

Pode autenticar um dispositivo no seu hub IoT para fins de teste com dois certificados autoassinados. Por vezes, este tipo de autenticação é denominado autenticação thumbprint porque os certificados são identificados por valores hash calculados chamados impressões digitais ou thumbprints. Estes valores hash calculados são utilizados por Hub IoT para autenticar os seus dispositivos.

Importante

Recomendamos que utilize certificados assinados por uma Autoridade de Certificação (AC) emissora, mesmo para fins de teste. Nunca utilize certificados autoassinados na produção.

Criar um certificado autoassinado

Pode utilizar o OpenSSL para criar certificados autoassinados. Os passos seguintes mostram-lhe como executar comandos OpenSSL numa shell de bash para criar um certificado autoassinado e obter uma impressão digital de certificado que pode ser utilizada para autenticar o seu dispositivo no Hub IoT.

Nota

Se quiser utilizar certificados autoassinados para testes, tem de criar dois certificados para cada dispositivo.

  1. Execute o seguinte comando para gerar uma chave privada e criar um ficheiro de chave privada codificada por PEM (.key), substituindo os seguintes marcadores de posição pelos valores correspondentes. A chave privada gerada pelo seguinte comando utiliza o algoritmo RSA com encriptação de 2048 bits.

    {KeyFile}. O nome do seu ficheiro de chave privada.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Execute o seguinte comando para gerar um pedido de assinatura de certificado PKCS #10 (CSR) e crie um ficheiro CSR (.csr), substituindo os seguintes marcadores de posição pelos respetivos valores correspondentes. Certifique-se de que especifica o ID do dispositivo IoT para o certificado autoassinado quando lhe for pedido.

    {KeyFile}. O nome do seu ficheiro de chave privada.

    {CsrFile}. O nome do ficheiro CSR.

    {DeviceID}. O nome do seu dispositivo IoT.

    openssl req -new -key {KeyFile} -out {CsrFile}
    
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:{DeviceID}
    Email Address []:.
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:.
    An optional company name []:.
    
  3. Execute o seguinte comando para examinar e verificar o CSR, substituindo os seguintes marcadores de posição pelos valores correspondentes.

    {CsrFile}. O nome do ficheiro de certificado.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Execute o seguinte comando para gerar um certificado autoassinado e criar um ficheiro de certificado codificado PEM (.crt), substituindo os seguintes marcadores de posição pelos respetivos valores correspondentes. O comando converte e assina o CSR com a sua chave privada, gerando um certificado autoassinado que expira dentro de 365 dias.

    {KeyFile}. O nome do seu ficheiro de chave privada.

    {CsrFile}. O nome do ficheiro CSR.

    {CrtFile}. O nome do ficheiro de certificado.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Execute o seguinte comando para obter a impressão digital do certificado, substituindo os seguintes marcadores de posição pelos valores correspondentes. A impressão digital de um certificado é um valor hash calculado que é exclusivo desse certificado. Precisa da impressão digital para configurar o seu dispositivo IoT no Hub IoT para fins de teste.

    {CrtFile}. O nome do ficheiro de certificado.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Verificar o certificado manualmente após o carregamento

Quando carrega o certificado de autoridade de certificação (AC) de raiz ou o certificado de AC subordinada para o seu hub IoT, pode optar por verificar automaticamente o certificado. Se não tiver escolhido verificar automaticamente o certificado durante o carregamento, o certificado é apresentado com o respetivo estado definido como Não verificado. Tem de efetuar os seguintes passos para verificar manualmente o certificado.

  1. Selecione o certificado para ver a caixa de diálogo Detalhes do Certificado .

  2. Selecione Gerar Código de Verificação na caixa de diálogo.

    Captura de ecrã a mostrar a caixa de diálogo de detalhes do certificado.

  3. Copie o código de verificação para a área de transferência. Tem de utilizar este código de verificação como requerente do certificado nos passos subsequentes. Por exemplo, se o código de verificação for 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, adicione-o como o assunto do certificado, conforme mostrado no passo seguinte.

  4. Existem três formas de gerar um certificado de verificação:

    • Se estiver a utilizar o script do PowerShell fornecido pela Microsoft, execute New-CACertsVerificationCert "<verification code>" para criar um certificado com o nome VerifyCert4.cer, substituindo <verification code> pelo código de verificação gerado anteriormente. Para obter mais informações, veja Managing test CA certificates for samples and tutorials in the GitHub repository for the Hub IoT do Azure Device SDK for C (Gerir certificados de AC de teste para exemplos e tutoriais no repositório do GitHub para o SDK do Dispositivo Hub IoT do Azure para C).

    • Se estiver a utilizar o script bash fornecido pela Microsoft, execute ./certGen.sh create_verification_certificate "<verification code>" para criar um certificado com o nome verification-code.cert.pem, substituindo <verification code> pelo código de verificação gerado anteriormente. Para obter mais informações, veja Gerir certificados de AC de teste para exemplos e tutoriais no repositório do GitHub para o SDK do Dispositivo Hub IoT do Azure para C.

    • Se estiver a utilizar o OpenSSL para gerar os certificados, primeiro tem de gerar uma chave privada e, em seguida, gerar um ficheiro de pedido de assinatura de certificado (CSR). No exemplo seguinte, substitua <verification code> pelo código de verificação gerado anteriormente:

    openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
    openssl req -new -key pop.key -out pop.csr
    
    -----
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:<verification code>
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    Em seguida, crie um certificado com o ficheiro de configuração adequado para a AC de raiz ou para a AC subordinada e para o ficheiro CSR. O exemplo seguinte demonstra como utilizar o OpenSSL para criar o certificado a partir de um ficheiro de configuração de AC de raiz e do ficheiro CSR.

    openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
    

    Para obter mais informações, veja Tutorial - Criar e carregar certificados para teste.

  5. Selecione o novo certificado na vista Detalhes do Certificado .

  6. Após o carregamento do certificado, selecione Verificar. O estado do certificado deve ser alterado para Verificado.

Para obter mais informações:

Para obter mais informações sobre os certificados X.509 e como são utilizados no Hub IoT, consulte os seguintes artigos: