Solicitud de firma de certificado
En los sistemas de infraestructura de clave pública (PKI), una solicitud de firma de certificado (CSR o solicitud de certificación) es un mensaje enviado por un solicitante a una autoridad certificadora de la infraestructura de clave pública (PKI) para solicitar un certificado de identidad digital. La CSR generalmente contiene la clave pública para la cual se debe emitir el certificado, información de identificación (como un nombre de dominio) y una prueba de autenticidad que incluye protección de la integridad (por ejemplo, una firma digital). El formato más común para las CSR es la especificación PKCS #10; otros incluyen el formato de mensaje de solicitud de certificado (CRMF) más capaz y el formato SPKAC (clave pública firmada y desafío) generado por algunos navegadores web.
Procedimiento
Antes de crear una CSR para un certificado X.509, el solicitante primero genera un par de claves y mantiene en secreto la clave privada de ese par. La CSR contiene información que identifica al solicitante (como un nombre distinguido), la clave pública elegida por el solicitante y posiblemente más información. Cuando se utiliza el formato PKCS #10, la solicitud debe estar autofirmada utilizando la clave privada del solicitante, que proporciona prueba de posesión de la clave privada pero limita el uso de este formato a claves que se pueden utilizar para firma. El CSR debe ir acompañado de una prueba de origen (es decir, prueba de identidad del solicitante) que exige la autoridad de certificación, y la autoridad de certificación puede comunicarse con el solicitante para obtener más información.
Información típica requerida en una CSR (columna de muestra del certificado X.509 de muestra). Tenga en cuenta que a menudo existen alternativas para los nombres distinguidos (DN); el valor preferido aparece en la lista.
DN | Información | Descripción | Muestra |
---|---|---|---|
CN | Nombre común | Este es el nombre de dominio completamente cualificado que desea asegurar | *.wikipedia.org |
O | Nombre de la Organización | Por lo general el nombre legal de una empresa o entidad y debe incluir cualquier sufijo como Ltd., Inc., o Corp. | Wikimedia Foundation, Inc. |
OU | Dependencia de Organización | Departamento de organización interna/nombre de división | IT |
L | Localidad | Ciudad, ciudad, pueblo, etc. nombre | San Francisco |
ST | Estado | Provincia, región, condado o estado. Esto no debe abreviarse (por ejemplo, West Sussex, Normandy, New Jersey). | California |
C | País | El código ISO de dos letras para el país donde se encuentra su organización | Estados Unidos |
EMAIL | Dirección de correo electrónico | El contacto de la organización, generalmente del administrador de certificados o departamento de TI |
Si la solicitud tiene éxito, la autoridad certificadora devolverá un certificado de identidad que ha sido firmado digitalmente utilizando la clave privada de la autoridad certificadora.
Estructura de una RSC PKCS #10
Una solicitud de certificación en formato PKCS #10 consta de tres partes principales: la información de la solicitud de certificación, un identificador de algoritmo de firma y una firma digital en la información de la solicitud de certificación. La primera parte contiene la información importante, incluida la clave pública. La firma del solicitante impide que una entidad solicite un certificado falso de la clave pública de otra persona. Por lo tanto, la clave privada es necesaria para producir una CSR PKCS #10, pero no forma parte de la CSR.
El CSR para certificados de identificación personal y certificados de firma debe tener la dirección de correo electrónico del titular de la identificación o el nombre de la organización en el caso de una identificación comercial.
La primera parte, tipo ASN.1 CertificationRequestInfo, consta de un número de versión (que es 0 para todas las versiones conocidas, 1.0, 1.5 y 1.7 de las especificaciones), el nombre del sujeto, el clave pública (identificador de algoritmo + cadena de bits) y una colección de atributos que proporcionan información adicional sobre el tema del certificado. Los atributos pueden contener extensiones de certificado requeridas, una contraseña de desafío para restringir las revocaciones, así como cualquier información adicional sobre el tema del certificado, posiblemente incluyendo tipos locales o futuros.
Ejemplo de CSR PKCS #10
El estándar PKCS#10 define un formato binario para codificar CSR para su uso con X.509. Se expresa en ASN.1. A continuación se muestra un ejemplo de cómo puede examinar su estructura ASN.1 utilizando OpenSSL:
opensl asn1parse -i -in tu_request.p10
Una CSR se puede representar como un PKCS#10 codificado en Base64; un ejemplo de lo cual es dada a continuación:
-------BEGIN CERTIFICATE REQUEST----MIICzDCCAbQCAQAwgYxCzAJBgNVBAYTAkVOMQ0wCwYDVQIDARub25lMQ0wCwYDVQQHDARub25lMRIwEAYDVQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAWBgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25lLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8ALPT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/kieG83HsSmZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y/ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHcjvtr9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i57HhA7ECAwEAAaAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDRSspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5XflsllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy/YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPlrfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7-------Ese CERTIFICADO REQUEST--
La estructura ASN.1 de la solicitud de firma de certificado anterior (analizada por openssl) aparece de la siguiente manera, donde el primer número es el desplazamiento de bytes, d=profundidad, hl=longitud del encabezado del tipo actual, l =longitud del contenido:
0:d=0 hl=4 l= 716 cons: SEQUENCE 4:d=1 hl=4 l= 436 cons: SEQUENCE 8:d=2 hl=2 l= 1 prim: INTEGER:00 11:d=2 hl=3 l= 134 cons: SEQUENCE 14:d=3 hl=2 l= 11 cons: SET 16:d=4 hl=2 l= 9 cons: SEQUENCE 18:d=5 hl=2 l= 3 prim: OBJETO:countryName 23:d=5 hl=2 l= 2 prim: PRINTABLES:EN 27:d=3 hl=2 l= 13 cons: SET 29:d=4 hl=2 l= 11 cons: SEQUENCE 31:d=5 hl=2 l= 3 prim: OBJETO:stateOrProvinceName 36:d=5 hl=2 l= 4 prim: UTF8STRING:none 42:d=3 hl=2 l= 13 cons: SET 44:d=4 hl=2 l= 11 cons: SEQUENCE 46:d=5 hl=2 l= 3 prim: OBJETO:LocalityName 51:d=5 hl=2 l= 4 prim: UTF8STRING:none 57:d=3 hl=2 l= 18 cons: SET 59:d=4 hl=2 l= 16 cons: SEQUENCE 61:d=5 hl=2 l= 3 prim: OBJECT:organización Nombre 66:d=5 hl=2 l= 9 prim: UTF8STRING:Wikipedia 77:d=3 hl=2 l= 13 cons: SET 79:d=4 hl=2 l= 11 cons: SEQUENCE 81:d=5 hl=2 l= 3 prim: OBJECT:organizational UnitName 86:d=5 hl=2 l= 4 prim: UTF8STRING:none 92:d=3 hl=2 l= 24 cons: SET 94:d=4 hl=2 l= 22 cons: SEQUENCE 96:d=5 hl=2 l= 3 prim: OBJETO:commonName 101:d=5 hl=2 l= 15 prim: UTF8STRING:*.wikipedia.org 118:d=3 hl=2 l= 28 cons: SET 120:d=4 hl=2 l= 26 cons: SEQUENCE 122:d=5 hl=2 l= 9 prim: OBJETO:Email Dirección 133:d=5 hl=2 l= 13 prim: IA5STRING:none@none.com 148:d=2 hl=4 l= 290 cons: SEQUENCE 152:d=3 hl=2 l= 13 cons: SEQUENCE 154:d=4 hl=2 l= 9 prim: OBJETO:rsaEncryption 165:d=4 hl=2 l= 0 prim: NULL 167:d=3 hl=4 l= 271 prim: BIT STRING 442:d=2 hl=2 l= 0 cons: cont [ 0 ] 444:d=1 hl=2 l= 13 cons: SEQUENCE 446:d=2 hl=2 l= 9 prim: OBJECT:md5WithRSAEncryption 457:d=2 hl=2 l= 0 prim: NULL 459:d=1 hl=4 l= 257 prim: BIT STRING
Esto se generó proporcionando la codificación base64 en el comando openssl asn1parse -in your_request.p10 -inform PEM -i
donde PEM (Correo de privacidad mejorada) es el codificación de las reglas de codificación distinguida ASN.1 en base64.