Certificados X.509

Los certificados X.509 son documentos digitales que representan a un usuario, ordenador, servicio o dispositivo. Una autoridad certificadora (CA), una autoridad de certificación subordinada o una autoridad de registro emite certificados X.509. Los certificados contienen la clave pública del sujeto del certificado. No contienen la clave privada del sujeto, que debe almacenarse de forma segura. La RFC 5280 documenta certificados de clave pública, incluyendo sus campos y extensiones. Los certificados de clave pública están firmados digitalmente y normalmente contienen la siguiente información:

  • Información sobre la materia del certificado
  • La clave pública que corresponde a la clave privada del sujeto
  • Información sobre la CA emisora
  • Los algoritmos de cifrado y/o firma digital soportados
  • Información para determinar el estado de revocación y validez del certificado

Campos de certificado

Existen tres versiones incrementales del estándar de certificados X.509, y cada versión posterior añadió campos de certificado al estándar:

  • La versión 1 (v1), publicada en 1988, sigue el estándar inicial X.509 para certificados.
  • La versión 2 (v2), publicada en 1993, añade dos campos a los incluidos en la versión 1.
  • La versión 3 (v3), publicada en 2008, representa la versión actual del estándar X.509. Esta versión añade soporte para extensiones de certificado.

Esta sección está destinada como referencia general para los campos y extensiones de certificados disponibles en los certificados X.509. Para más información sobre campos de certificados y extensiones de certificado, incluyendo tipos de datos, restricciones y otros detalles, consulte la especificación RFC 5280 .

Campos de la versión 1

La siguiente tabla describe los campos de certificados de la Versión 1 para los certificados X.509. Todos los campos incluidos en esta tabla están disponibles en versiones posteriores del certificado X.509.

Name Description
Version Un número entero que identifica el número de versión del certificado.
Número de serie Un entero que representa el número único de cada certificado emitido por una autoridad certificadora (CA).
Firma El identificador del algoritmo criptográfico que utiliza la CA para firmar el certificado. El valor incluye tanto el identificador del algoritmo como cualquier parámetro opcional utilizado por dicho algoritmo, si corresponde.
Emisor El nombre distinguido (DN) de la CA que emite el certificado.
Validez El periodo de tiempo inclusivo por el cual el certificado es válido.
Subject El nombre distinguido (DN) del sujeto del certificado.
Asunto Información de clave pública La clave pública propiedad del sujeto del certificado.

Campos de la versión 2

La siguiente tabla describe los campos añadidos para la Versión 2, que contienen información sobre el emisor del certificado. Sin embargo, estos campos se usan raramente. Todos los campos incluidos en esta tabla están disponibles en versiones posteriores del certificado X.509.

Name Description
ID único del emisor Un identificador único que representa la CA emisora, tal como la define dicha CA.
ID único del sujeto Un identificador único que representa el sujeto del certificado, tal y como lo define la CA emisora.

Campos de la versión 3

La siguiente tabla describe el campo añadido para la Versión 3, que representa una colección de extensiones de certificados X.509.

Name Description
Extensiones Un conjunto de extensiones de certificados estándar y específicas de Internet. Para más información sobre las extensiones de certificados disponibles para los certificados X.509 v3, consulte Extensiones de certificado.

Extensiones de certificados

Las extensiones de certificado, introducidas con la Versión 3, proporcionan métodos para asociar más atributos a usuarios o claves públicas y para gestionar relaciones entre autoridades certificadoras. Para más información sobre extensiones de certificados, consulte la sección de Extensiones de Certificados de la especificación RFC 5280 .

Extensiones estándar

El estándar X.509 define las extensiones incluidas en esta sección, para su uso en la infraestructura de clave pública de Internet (PKI).

Name Description
Identificador de clave de autoridad Un identificador que representa el sujeto del certificado y el número de serie del certificado de la CA que emitió dicho certificado, o un hash de la clave pública de la CA emisora.
Identificador de clave del firmante Un hash de la clave pública del certificado actual.
Uso de claves Un valor de mapa de bits que define los servicios para los cuales se puede utilizar un certificado.
Periodo de uso de clave privada El periodo de validez de la parte de clave privada de un par de claves.
Políticas de Certificados Una colección de información de política, utilizada para validar el sujeto del certificado.
Cartografías de políticas Una colección de mapeos de políticas, cada uno de los cuales mapea una política en una organización con una política en otra.
Nombre alternativo del firmante Una colección de nombres alternativos para el sujeto.
Nombre alternativo del emisor Una colección de nombres alternativos para la CA emisora.
Atributos del Directorio de Sujetos Una colección de atributos de un directorio X.500 o LDAP.
Restricciones básicas Un conjunto de restricciones que permiten al certificado designar si se emite a una CA o a un usuario, ordenador, dispositivo o servicio. Esta extensión también incluye una restricción de longitud de camino que limita el número de CAs subordinadas que pueden existir.
Restricciones de nombre Un conjunto de restricciones que designan qué espacios de nombres están permitidos en un certificado emitido por la CA.
Restricciones de política Un conjunto de restricciones que pueden usarse para prohibir el mapeo de políticas entre CAs.
Uso extendido de claves Una colección de valores de propósito clave que indican cómo puede usarse la clave pública de un certificado, más allá de los propósitos identificados en la extensión de Uso de Claves .
Puntos de distribución CRL Una colección de URLs donde se publica la lista base de revocación de certificados (CRL).
Inhibir cualquier política Inhibe el uso del OID de Todas las Políticas de Emisión (2.5.29.32.0) en certificados CA subordinados
CRL más fresco Esta extensión, también conocida como Delta CRL Distribution Point, contiene una o más URLs donde se publica el delta CRL de la CA emisora.

Extensiones privadas de Internet

Las extensiones incluidas en esta sección son similares a las extensiones estándar y pueden utilizarse para dirigir solicitudes a información en línea sobre la CA emisora o el sujeto del certificado.

Name Description
Acceso a la Información de la Autoridad Una colección de entradas que describen el formato y la ubicación de la información adicional proporcionada por la CA emisora.
Acceso a la información del tema Una colección de entradas que describen el formato y la ubicación de información adicional proporcionada por el sujeto del certificado.

Formatos de certificado

Los certificados pueden guardarse en varios formatos. Azure IoT Hub autenticación suele utilizar los formatos Privacy-Enhanced Mail (PEM) y Personal Information Exchange (PFX). La siguiente tabla describe los archivos y formatos comúnmente usados para representar certificados.

Formato Description
Certificado binario Un certificado binario de forma cruda usando codificación ASN.1 de Reglas de Codificación Distinguida (DER).
Formato ASCII PEM Un archivo de certificado PEM (.pem) contiene un certificado codificado en Base64 que comienza y -----BEGIN CERTIFICATE----- termina en -----END CERTIFICATE-----. Uno de los formatos más comunes para los certificados X.509, el formato PEM es requerido por IoT Hub al subir ciertos certificados, como los certificados de dispositivos.
Clave PEM ASCII Contiene una clave DER codificada en Base64, opcionalmente con más metadatos sobre el algoritmo utilizado para la protección por contraseña.
Certificado PKCS #7 Un formato diseñado para el transporte de datos firmados o cifrados. Puede incluir toda la cadena de certificados. El RFC 2315 define este formato.
Llave PKCS #8 El formato de una tienda privada de llaves. La RFC 5208 define este formato.
Clave y certificado PKCS #12 Un formato complejo que puede almacenar y proteger una clave y toda la cadena de certificados. Se usa comúnmente con una extensión .p12 o .pfx. PKCS #12 es sinónimo del formato PFX. La RFC 7292 define este formato.

Certificados autofirmados

Puedes autenticar un dispositivo en tu hub IoT para fines de prueba usando dos certificados autofirmados. Este tipo de autenticación a veces se denomina autenticación por huella digital porque los certificados se identifican mediante valores hash calculados llamados huellas dactilares o huellas dactilares. Estos valores hash calculados son utilizados por IoT Hub para autenticar tus dispositivos.

Importante

Recomendamos que utilices certificados firmados por una Autoridad Certificadora (CA) emisora, incluso para fines de prueba. Nunca uses certificados autofirmados en producción.

Creación de un certificado autofirmado

Puede usar OpenSSL para crear certificados autofirmados. Los siguientes pasos te muestran cómo ejecutar comandos OpenSSL en un shell bash para crear un certificado autofirmado y recuperar una huella digital del certificado que pueda usarse para autenticar tu dispositivo en IoT Hub.

Note

Si quieres usar certificados autofirmados para pruebas, debes crear dos certificados para cada dispositivo.

  1. Ejecuta el siguiente comando para generar una clave privada y crear un archivo de clave privada (.key) codificado en PEM, reemplazando los siguientes marcadores de posición por sus valores correspondientes. La clave privada generada por el siguiente comando utiliza el algoritmo RSA con cifrado de 2048 bits.

    {Archivo clave}. El nombre de tu archivo de clave privada.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Ejecuta el siguiente comando para generar una solicitud de firma de certificados PKCS #10 (CSR) y crea un archivo CSR (.csr), reemplazando los siguientes marcadores de posición por sus valores correspondientes. Asegúrate de especificar el ID del dispositivo IoT para tu certificado autofirmado cuando te lo pidan.

    {Archivo clave}. El nombre de tu archivo de clave privada.

    {Archivo Csr}. El nombre de tu expediente de atención al cliente (CSR).

    {DeviceID}. El nombre de tu 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. Ejecuta el siguiente comando para examinar y verificar tu CSR, reemplazando los siguientes marcadores de posición por sus valores correspondientes.

    {Archivo Csr}. El nombre de tu archivo de certificados.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Ejecuta el siguiente comando para generar un certificado autofirmado y crear un archivo de certificado codificado en PEM (.crt), reemplazando los siguientes marcadores de posición por sus valores correspondientes. El comando convierte y firma tu CSR con tu clave privada, generando un certificado autofirmado que caduca en 365 días.

    {Archivo clave}. El nombre de tu archivo de clave privada.

    {Archivo Csr}. El nombre de tu expediente de atención al cliente (CSR).

    {Archivo CRT}. El nombre de tu archivo de certificados.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Ejecuta el siguiente comando para recuperar la huella digital del certificado, reemplazando los siguientes marcadores de posición por sus valores correspondientes. La huella digital de un certificado es un valor hash calculado que es único para ese certificado. Necesitas la huella digital para configurar tu dispositivo IoT en IoT Hub para las pruebas.

    {Archivo CRT}. El nombre de tu archivo de certificados.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Verifica el certificado manualmente después de subirlo

Cuando subes tu certificado de autoridad certificadora raíz (CA) o certificado CA subordinado a tu hub IoT, puedes elegir verificar automáticamente el certificado. Si no elegiste verificar automáticamente tu certificado durante la subida, tu certificado aparece con su estado configurado como No verificado. Debes realizar los siguientes pasos para verificar manualmente tu certificado.

  1. Seleccione el certificado para ver el cuadro de diálogo Detalles del Certificado .

  2. Selecciona Generar código de verificación en el diálogo.

    Captura de pantalla que muestra el cuadro de diálogo de detalles del certificado.

  3. Copie este código de verificación en el Portapapeles. Debes utilizar este código de verificación como sujeto del certificado en los pasos siguientes. Por ejemplo, si el código de verificación es 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, añade ese como asunto de tu certificado como se muestra en el siguiente paso.

  4. Hay tres formas de generar un certificado de verificación:

    • Si usas el script PowerShell proporcionado por Microsoft, ejecuta New-CACertsVerificationCert "<verification code>" para crear un certificado llamado VerifyCert4.cer, reemplazándolo <verification code> por el código de verificación generado previamente. Para obtener más información, consulte Administración de certificados de CA de prueba para obtener ejemplos y tutoriales en el repositorio de GitHub para el SDK de dispositivos de Azure IoT Hub para C.

    • Si usas el script Bash proporcionado por Microsoft, ejecuta ./certGen.sh create_verification_certificate "<verification code>" para crear un certificado llamado verification-code.cert.pem, reemplazándolo <verification code> por el código de verificación generado anteriormente. Para más información, consulta Gestión de certificados de CA de prueba para muestras y tutoriales en el repositorio de GitHub para el SDK de dispositivos de Azure IoT Hub para C.

    • Si usas OpenSSL para generar tus certificados, primero debes generar una clave privada y luego un archivo de solicitud de firma de certificados (CSR). En el siguiente ejemplo, sustituyamos <verification code> por el código de verificación generado previamente:

    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 []:
    

    Luego, crea un certificado usando el archivo de configuración correspondiente para la CA raíz o la CA subordinada, y el archivo CSR. El siguiente ejemplo demuestra cómo usar OpenSSL para crear el certificado a partir de un archivo de configuración raíz de la CA y el archivo CSR.

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

    Para más información, consulta el Tutorial - Crear y subir certificados para pruebas.

  5. Selecciona el nuevo certificado en la vista de Detalles del Certificado .

  6. Después de que el certificado se suba, selecciona Verificar. El estado del certificado debería cambiar a Verificado.

Para obtener más información

Para más información sobre los certificados X.509 y cómo se utilizan en IoT Hub, consulte los siguientes artículos: