Certificados X.509

Os certificados X.509 são documentos digitais que representam um utilizador, computador, serviço ou dispositivo. Uma autoridade certificadora (CA), CA subordinada ou autoridade de registo emite certificados X.509. Os certificados contêm a chave pública do assunto do certificado. Não contêm a chave privada do sujeito, que deve ser armazenada de forma segura. A RFC 5280 documenta certificados de chave pública, incluindo os seus campos e extensões. Os certificados de chave pública são assinados digitalmente e normalmente contêm a seguinte informação:

  • Informação sobre o tema do certificado
  • A chave pública que corresponde à chave privada do sujeito
  • Informação sobre a CA emissora
  • Os algoritmos de encriptação e/ou assinatura digital suportados
  • Informação 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 ao padrão:

  • A Versão 1 (v1), publicada em 1988, segue a norma inicial X.509 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 do padrão 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 certificados e extensões de certificados disponíveis nos certificados X.509. Para mais informações sobre campos de certificado e extensões de certificados, incluindo tipos de dados, restrições e outros detalhes, consulte 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 subsequentes do certificado X.509.

Name Description
Version Um inteiro que identifica o número de versão do certificado.
Número de Série Um número inteiro que representa o número único de cada certificado emitido por uma autoridade certificadora (CA).
Assinatura O identificador do algoritmo criptográfico usado pela CA para assinar o certificado. O valor inclui tanto o identificador do algoritmo como quaisquer parâmetros opcionais usados por esse algoritmo, se aplicável.
Emissor O nome distinto (DN) da CA emissora do certificado.
Validade O período de tempo inclusivo durante o qual o certificado é válido.
Assunto O nome distinto (DN) do sujeito do certificado.
Assunto Informação da Chave Pública A chave pública pertence ao sujeito do certificado.

Campos da versão 2

A tabela seguinte descreve os campos adicionados para a Versão 2, contendo informações sobre o emissor do certificado. No entanto, estes campos são raramente utilizados. Todos os campos incluídos nesta tabela estão disponíveis em versões subsequentes do certificado X.509.

Name Description
ID Único do Emissor Um identificador único que representa a CA emissora, conforme definido pela CA emissora.
ID Único do Sujeito Um identificador único que representa o sujeito do certificado, conforme definido pela CA emissora.

Campos da versão 3

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

Name Description
Extensões Uma coleção de extensões de certificados padrão e específicas da Internet. Para mais informações sobre as extensões de certificados disponíveis para certificados X.509 v3, consulte Extensões de certificados.

Prorrogações de certificados

As extensões de certificados, 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 certificadoras. Para mais informações sobre extensões de certificados, consulte a secção de Extensões de Certificados 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 chave pública da Internet (PKI).

Name Description
Identificador da Chave de Autoridade Um identificador que representa ou o sujeito do certificado e o número de série do certificado da CA que emitiu este certificado, ou um hash da chave pública da CA emissora.
Identificador da Chave do Requerente Um hash da chave pública do certificado atual.
Utilização da Chave Um valor bitmap 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 privada da chave de um par de chaves.
Políticas de Certificados Uma coleção de informações de política, usada para validar o assunto 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 uma política noutra.
Nome Alternativo do Requerente Uma coleção de nomes alternativos para o sujeito.
Nome Alternativo do Emissor Uma coleção de nomes alternativos para a CA emissora.
Atributos do Diretório Sujeito Uma coleção de atributos de um diretório X.500 ou LDAP.
Restrições Básicas Um conjunto de restrições que permitem ao certificado designar se é emitido para uma CA, ou para um utilizador, computador, dispositivo ou serviço. Esta extensão inclui também uma restrição de comprimento de caminho que limita o número de CAs subordinadas que podem existir.
Restrições de nomes Um conjunto de restrições que designam quais os espaços de nomes permitidos num certificado emitido pela CA.
Restrições políticas Um conjunto de restrições que podem ser usadas para proibir mapeamentos de políticas entre CAs.
Uso Estendido de Teclas Uma coleção de valores de propósito de chave que indicam como a chave pública de um certificado pode ser utilizada, para além dos propósitos identificados na extensão de Uso de Chaves .
Pontos de Distribuição CRL Uma coleção de URLs onde a lista base de revogação de certificados (CRL) é publicada.
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 CA subordinados
CRL mais recente Esta extensão, também conhecida como Delta CRL Distribution Point, contém uma ou mais URLs onde o delta CRL da CA emissora é publicado.

Extensões privadas da Internet

As extensões incluídas nesta secção são semelhantes às extensões padrão e podem ser usadas para direcionar candidaturas para informações online sobre o CA emissor ou o objeto do certificado.

Name Description
Acesso à Informação da Autoridade Uma coleção de entradas que descrevem o formato e a localização de informações adicionais fornecidas pela CA emissora.
Acesso à Informação do Assunto Uma coleção de entradas que descrevem o formato e a localização de informações adicionais fornecidas pelo sujeito do certificado.

Formatos de certificado

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

Formato Description
Certificado binário Um certificado binário de forma bruta usando codificação ASN.1 das Regras de Codificação Distinguida (DER).
Formato ASCII PEM Um ficheiro de certificado PEM (.pem) contém um certificado codificado em Base64 que começa e -----BEGIN CERTIFICATE----- termina em -----END CERTIFICATE-----. Um dos formatos mais comuns para certificados X.509, o formato PEM é exigido pelo Hub IoT ao carregar certos certificados, como certificados de dispositivos.
Chave PEM ASCII Contém uma chave DER codificada em Base64, opcionalmente com mais metadados sobre o algoritmo usado para proteção por palavra-passe.
Certificado PKCS #7 Um formato concebido para o transporte de dados assinados ou encriptados. Pode incluir toda a cadeia de certificados. O RFC 2315 define este formato.
Tecla PKCS #8 O formato para uma loja privada de chaves. 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 usado com uma extensão .p12 ou .pfx. PKCS #12 é sinónimo do formato PFX. A RFC 7292 define este formato.

Certificados autoassinados

Pode autenticar um dispositivo no seu hub IoT para fins de teste usando dois certificados auto-assinados. Este tipo de autenticação é por vezes chamado de autenticação por impressão digital porque os certificados são identificados por valores de hash calculados chamados impressões digitais ou impressões digitais. Estes valores de hash calculados são usados pelo Hub IoT para autenticar os seus dispositivos.

Importante

Recomendamos que utilize certificados assinados por uma Autoridade Certificadora (CA) emissora, mesmo para fins de teste. Nunca use certificados auto-assinados em produção.

Criar um certificado autoassinado

Você pode usar OpenSSL para criar certificados autoassinados. Os passos seguintes mostram-lhe como executar comandos OpenSSL num bash shell para criar um certificado auto-assinado e obter uma impressão digital do certificado que pode ser usada para autenticar o seu dispositivo no Hub IoT.

Note

Se quiser usar certificados auto-assinados para testes, deve criar dois certificados para cada dispositivo.

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

    {FicheiroChave}. O nome do teu ficheiro de chave privada.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Execute o comando seguinte 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. Certifique-se de especificar o ID do dispositivo IoT para o seu certificado auto-assinado quando solicitado.

    {FicheiroChave}. O nome do teu ficheiro de chave privada.

    {CsrFile}. O nome do teu 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 comando seguinte para examinar e verificar o seu CSR, substituindo os seguintes marcadores pelos respetivos valores.

    {CsrFile}. O nome do seu ficheiro de certificado.

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

    {FicheiroChave}. O nome do teu ficheiro de chave privada.

    {CsrFile}. O nome do teu ficheiro CSR.

    {CrtFile}. O nome do seu ficheiro de certificado.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Execute o comando seguinte para recuperar a impressão digital do certificado, substituindo os seguintes marcadores pelos respetivos valores. A impressão digital de um certificado é um valor de hash calculado que é único para esse certificado. Precisa da impressão digital para configurar o seu dispositivo IoT no Hub IoT para testes.

    {CrtFile}. O nome do seu ficheiro de certificado.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Verificar o certificado manualmente após o upload

Quando carrega o seu certificado de autoridade certificadora raiz (CA) ou certificado CA subordinado para o seu hub IoT, pode optar por verificar automaticamente o certificado. Se não optaste por verificar automaticamente o teu certificado durante o carregamento, o teu certificado é mostrado com o estado definido como Não Verificado. Deve realizar os seguintes passos para verificar manualmente o seu certificado.

  1. Selecione o certificado para visualizar o diálogo Detalhes do Certificado .

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

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

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

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

    • Se estiver a usar o script PowerShell fornecido pela Microsoft, execute New-CACertsVerificationCert "<verification code>" para criar um certificado chamado VerifyCert4.cer, substituindo <verification code> pelo código de verificação gerado anteriormente. Para obter mais informações, consulte Gerenciando certificados de CA de teste para exemplos e tutoriais no repositório GitHub para o SDK de Dispositivo do Hub IoT do Azure para C.

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

    • Se estiver a usar OpenSSL para gerar os seus certificados, deve primeiro gerar uma chave privada e depois gerar um ficheiro de pedido de assinatura de certificados (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 []:
    

    Depois, crie um certificado usando o ficheiro de configuração apropriado para a CA raiz ou para a CA subordinada, e o ficheiro CSR. O exemplo seguinte demonstra como usar o OpenSSL para criar o certificado a partir de um ficheiro de configuração raiz da CA e do ficheiro CSR.

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

    Para mais informações, consulte o Tutorial - Criar e carregar certificados para testes.

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

  6. Depois de o certificado carregar, selecione Verificar. O estado do certificado deve mudar para Verificado.

Para obter mais informações

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