Certificados X.509
Los certificados X.509 son documentos digitales que representan a un usuario, equipo, servicio o dispositivo. Una entidad de certificación (CA), una CA subordinada o una autoridad de registro emisora de certificados X.509. Los certificados contienen la clave pública del firmante del certificado. No contienen la clave privada del firmante, la cual se debe almacenar de forma segura. RFC 5280 documenta certificados de clave pública, incluidos sus campos y extensiones. Los certificados de clave pública están firmados digitalmente y, por lo general, contienen la siguiente información:
- Información sobre el firmante del certificado
- La clave pública que corresponde a la clave privada del firmante
- Información acerca de la entidad de certificación emisora
- Algoritmos de cifrado y de firma digital admitidos
- Información para determinar la revocación y el estado de validez del certificado
Campos de un certificado
Hay tres versiones incrementales del estándar de certificado X.509 y cada versión posterior agregó campos de certificado al estándar:
- La versión 1 (v1), publicada en 1988, sigue el estándar X.509 inicial para certificados.
- La versión 2 (v2), publicada en 1993, agrega dos campos a los campos 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 agrega compatibilidad con las extensiones de certificado.
Esta sección está pensada como referencia general para los campos de certificado y las extensiones de certificado disponibles en certificados X.509. Para obtener más información sobre los campos de certificado y las extensiones de certificado, incluidos los tipos de datos, las restricciones y otros detalles, consulte la especificación RFC 5280.
Campos de la versión 1
En la tabla siguiente se describen los campos de certificado 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.
Nombre | Descripción |
---|---|
Versión | Número entero que identifica el número de versión del certificado. |
Número de serie | Número entero que representa el número único de cada certificado emitido por una entidad de certificación (CA). |
Signature | Identificador del algoritmo criptográfico utilizado por la CA para firmar el certificado. El valor incluye tanto el identificador del algoritmo como los parámetros opcionales que usa ese algoritmo, si procede. |
Emisor | Nombre distintivo (DN) de la entidad de certificación que emite el certificado. |
Validez | Período de tiempo inclusivo durante el que el certificado es válido. |
Subject | Nombre distintivo (DN) del firmante del certificado. |
Información de clave pública del firmante | Clave pública propiedad del firmante del certificado. |
Campos de la versión 2
En la tabla siguiente se describen los campos agregados para la versión 2, que contienen información sobre el emisor de certificados. No obstante, estos campos se usan con poca frecuencia. Todos los campos incluidos en esta tabla están disponibles en versiones posteriores del certificado X.509.
Nombre | Descripción |
---|---|
Identificador único del emisor | Identificador único que representa la entidad de certificación emisora, tal y como se define en la entidad de certificación emisora. |
Id. único del firmante | Un identificador único que representa al firmante del certificado, tal y como lo define la entidad de certificación emisora. |
Campos de la versión 3
En la tabla siguiente se describe el campo agregado para la versión 3, que representa una colección de extensiones de certificado X.509.
Nombre | Descripción |
---|---|
Extensiones | Colección de extensiones de certificado estándar y específicas de Internet. Para obtener más información sobre las extensiones de certificado disponibles para los certificados X.509 v3, consulte Extensiones de certificado. |
Extensiones de certificado
Las extensiones de certificado, introducidas con la versión 3, proporcionan métodos para asociar más atributos con usuarios o claves públicas y para administrar relaciones entre entidades de certificación. Para obtener más información sobre las extensiones de certificado, consulte la sección Extensiones de certificado 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 (PKI) de Internet.
Nombre | Descripción |
---|---|
Identificador de clave de entidad emisora | Identificador que representa el firmante del certificado y el número de serie del certificado de entidad de certificación que emitió este certificado o un hash de la clave pública de la CA emisora. |
Identificador de clave del firmante | Hash de la clave pública del certificado actual. |
Uso de la clave | Valor de mapa de bits que define los servicios para los que se puede usar un certificado. |
Período de uso de clave privada | Período de validez de la porción de la clave privada de un par de claves. |
Directivas de certificado | Colección de información de directiva que se usa para validar el firmante del certificado. |
Asignaciones de directiva | Colección de asignaciones de directivas, cada una de las cuales asigna una directiva de una organización a la directiva de otra organización. |
Nombre alternativo del firmante | Colección de nombres alternativos para el firmante. |
Nombre alternativo del emisor | Colección de nombres alternativos para la entidad de certificación emisora. |
Atributos de directorio de firmantes | Colección de atributos de un directorio X.500 o LDAP. |
Restricciones básicas | Colección de restricciones que permiten al certificado designar si se emite para una entidad de certificación o para un usuario, equipo, dispositivo o servicio. Esta extensión también incluye una restricción de longitud de la ruta de acceso que limita el número de entidades de certificación subordinadas que pueden existir. |
Restricciones de nombre | Colección de restricciones que designan qué espacios de nombres se permiten en un certificado emitido por una entidad de certificación. |
Restricciones de directiva | Colección de restricciones que se pueden usar para prohibir las asignaciones de directivas entre entidades de certificación. |
Uso mejorado de clave | Colección de valores de propósito clave que indican cómo se puede usar la clave pública de un certificado, más allá de los propósitos identificados en la extensión Uso de claves. |
Puntos de distribución CRL | Colección de direcciones URL donde se publica la lista de revocación de certificados base (CRL). |
Deshabilitación de anyPolicy | Deshabilita el uso del OID Todas las directivas de emisión (2.5.29.32.0) en los certificados de la entidad de certificación subordinada |
CRL más reciente | Esta extensión, también conocida como Punto de distribución de CRL delta, contiene una o varias direcciones URL en las que se publica la CRL delta de la entidad emisora. |
Extensiones de Internet privadas
Las extensiones incluidas en esta sección son similares a las extensiones estándar y se pueden usar para dirigir aplicaciones a información en línea sobre la entidad de certificación emisora o el firmante del certificado.
Nombre | Descripción |
---|---|
Acceso a la información de entidad emisora | Colección de entradas que describen el formato y la ubicación de la información adicional proporcionada por la entidad de certificación emisora. |
Acceso a la información del firmante | Colección de entradas que describen el formato y la ubicación de la información adicional proporcionada por el firmante del certificado. |
Formatos de certificado
Los certificados pueden guardarse en varios formatos. La autenticación de Azure IoT Hub suele utilizar los formatos Privacy-Enhanced Mail (PEM) y Personal Information Exchange (PFX). En la tabla siguiente se describen los archivos y formatos usados habitualmente para representar certificados.
Formato | Descripción |
---|---|
Certificado binario | Un certificado binario de formulario sin formato mediante la codificación ASN.1 de reglas de codificación distinguida (DER). |
Formato PEM de ASCII | Un archivo de certificado PEM (.pem) contiene un certificado codificado en Base64 que comienza por -----BEGIN CERTIFICATE----- y termina con -----END CERTIFICATE----- . Uno de los formatos más comunes para los certificados X.509 requiere el formato PEM IoT Hub al cargar determinados certificados, como los certificados de dispositivo. |
Clave ASCII PEM | Contiene una clave DER codificada en Base64, opcionalmente con más metadatos sobre el algoritmo utilizado para la protección de la contraseña. |
Certificado PKCS #7 | Formato diseñado para el transporte de datos firmados o cifrados. Puede incluir toda la cadena de certificados. RFC 2315 define este formato. |
Clave PKCS #8 | El formato de un almacén de claves privadas. 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 normalmente con una extensión .p12 o .pfx. PKCS #12 es sinónimo del formato PFX. RFC 7292 define este formato. |
Certificados autofirmados
Puede autenticar un dispositivo en su centro de IoT con fines de prueba; para hacerlo, use dos certificados autofirmados. A veces, este tipo de autenticación se denomina autenticación de huella digital, ya que los certificados se identifican por medio de valores de hash calculados denominados huellas digitales o huellas dactilares. Estos valores de hash calculados se usan en IoT Hub para autenticar los dispositivos.
Importante
Se recomienda usar certificados firmados por una entidad de certificación (CA) emisora, incluso con fines de prueba. Nunca use certificados autofirmados en la etapa de producción.
Crear un certificado autofirmado
Puede usar OpenSSL para crear certificados autofirmados. En los pasos siguientes, se muestra cómo ejecutar comandos de OpenSSL en un shell de Bash para crear un certificado autofirmado y recuperar una huella digital de certificado que se puede usar para autenticar su dispositivo en IoT Hub.
Nota
Si desea usar certificados autofirmados con fines de pruebas, debe crear dos certificados para cada dispositivo.
Ejecute el siguiente comando para generar una clave privada y crear un archivo de clave privada con codificación PEM (.key). Reemplace los siguientes marcadores de posición por sus valores correspondientes. La clave privada generada por el comando siguiente usa el algoritmo RSA con cifrado de 2048 bits.
{KeyFile}. Nombre del archivo de clave privada.
openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
Ejecute el siguiente comando para generar una solicitud de firma de certificado (CSR) PKCS #10 y crear un archivo CSR (.csr). Reemplace los siguientes marcadores de posición por sus valores correspondientes. Asegúrese de especificar el id. de dispositivo del dispositivo IoT para el certificado autofirmado cuando se le solicite.
{KeyFile}. Nombre del archivo de clave privada.
{CsrFile}. Nombre del archivo CSR.
{DeviceID}. Nombre del 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 []:.
Ejecute el siguiente comando para examinar y comprobar la CSR. Reemplace los siguientes marcadores de posición por sus valores correspondientes.
{CsrFile}. Nombre del archivo de certificado.
openssl req -text -in {CsrFile} -verify -noout
Ejecute el siguiente comando para generar un certificado autofirmado y crear un archivo de certificado con codificación PEM (.crt). Reemplace los siguientes marcadores de posición por sus valores correspondientes. El comando convierte y firma la CSR con la clave privada, lo que genera un certificado autofirmado que expira en 365 días.
{KeyFile}. Nombre del archivo de clave privada.
{CsrFile}. Nombre del archivo CSR.
{CrtFile}. Nombre del archivo de certificado.
openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
Ejecute el siguiente comando para recuperar la huella digital del certificado. Reemplace los siguientes marcadores de posición por sus valores correspondientes. La huella digital de un certificado es un valor de hash calculado que es único para ese certificado. Necesita la huella digital para configurar el dispositivo IoT en IoT Hub para realizar pruebas.
{CrtFile}. Nombre del archivo de certificado.
openssl x509 -in {CrtFile} -noout -fingerprint
Comprobación manual del certificado después de la carga
Al cargar el certificado raíz de la autoridad de certificación (CA) o el certificado de CA subordinado al centro de IoT, puede elegir verificar automáticamente el certificado. Si no ha elegido comprobar automáticamente el certificado durante la carga, el certificado se muestra con el estado establecido en Sin comprobar. Debe llevar a cabo los pasos siguientes para comprobar manualmente el certificado.
Seleccione el certificado para ver el cuadro de diálogo Detalles de certificado.
Seleccione Generar código de comprobación en el cuadro de diálogo.
Copie este código de verificación en el portapapeles. Debe usar este código de verificación como sujeto del certificado en pasos posteriores. Por ejemplo, si el código de verificación es
75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3
, agréguelo como asunto del certificado como se muestra en el paso siguiente.Hay tres formas de generar un certificado de verificación:
Si usa el script de PowerShell que proporciona Microsoft, ejecute
New-CACertsVerificationCert "<verification code>"
para crear un certificado denominadoVerifyCert4.cer
. Reemplace<verification code>
por el código de verificación generado anteriormente. 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 está usando el script Bash que proporciona Microsoft, ejecute
./certGen.sh create_verification_certificate "<verification code>"
para crear un certificado denominado verification-code.cert.pem, reemplace<verification code>
con el código de verificación generado anteriormente. 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 usa OpenSSL para generar los certificados, primero debe generar una clave privada y, luego, un archivo de solicitud de firma de certificado (CSR). En el ejemplo siguiente, reemplace
<verification code>
por el código de verificación generado 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 []:
A continuación, cree un certificado con el archivo de configuración adecuado para la CA raíz o la CA subordinada y el archivo CSR. En el ejemplo siguiente se muestra cómo usar OpenSSL para crear el certificado a partir de un archivo de configuración de CA raíz y el archivo CSR.
openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
Para obtener más información, consulte Tutorial: Creación y carga de certificados para pruebas.
Seleccione el nuevo certificado en la vista Detalles de certificado.
Una vez que el certificado se carga, seleccione Comprobar. El estado del certificado debe cambiar a Comprobado.
Para obtener más información
Para obtener más información sobre los certificados X.509 y cómo se usan en IoT Hub, consulte los artículos siguientes: