stringtranslate.com

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 de certificación de la infraestructura de clave pública (PKI) con el fin de solicitar un certificado de identidad digital . La CSR suele contener la clave pública para la que 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 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 [1] y el formato SPKAC (Signed Public Key and Challenge) generado por algunos navegadores web .

Procedimiento

Antes de crear un CSR para un certificado X.509 , el solicitante primero genera un par de claves , manteniendo en secreto la clave privada de ese par, por ejemplo:

# https://www.openssl.org/docs/manmaster/man1/openssl-genrsa.html# "openssl genrsa" crea una clave privada RSA:$ openssl genrsa -out 2024_wikipedia.org.key

La CSR contiene información que identifica al solicitante (como un nombre distintivo ), 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 una prueba de posesión de la clave privada pero limita el uso de este formato a claves que se pueden utilizar para (alguna forma de) firma. La CSR debe ir acompañada de una prueba de origen (es decir, prueba de identidad del solicitante) que es requerida por la autoridad de certificación, y la autoridad de certificación puede ponerse en contacto con el solicitante para obtener más información.

Información típica requerida en un CSR (columna de muestra de certificado X.509 ). Tenga en cuenta que a menudo existen alternativas para los nombres distinguidos (DN); se indica el valor preferido.

Esta línea de comando de muestra utiliza los detalles que se enumeran en la tabla anterior:

# https://www.openssl.org/docs/manmaster/man1/openssl-req.html# "openssl req" crea una solicitud de firma:$ openssl req -sha512 -new -subj "/C=US/ST=California/L=San Francisco/O=Wikimedia Foundation, Inc./CN=*.wikipedia.org" -key 2024_wikipedia.org.key -out 2024_wikipedia.org.csr

Si la solicitud tiene éxito, la autoridad certificadora enviará un certificado de identidad firmado digitalmente utilizando la clave privada de la autoridad certificadora.

Estructura de un CSR 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 evita que una entidad solicite un certificado falso de la clave pública de otra persona. [3] Por lo tanto, la clave privada es necesaria para producir una CSR PKCS #10, pero no es parte de la CSR. [4]

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, de 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, la clave pública (identificador del algoritmo + cadena de bits) y una colección de atributos que proporcionan información adicional sobre el sujeto del certificado. Los atributos pueden contener las extensiones de certificado requeridas, una contraseña de desafío para restringir las revocaciones, así como cualquier información adicional sobre el sujeto del certificado, posiblemente incluyendo tipos locales o futuros. [3]

Ejemplo de un 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 se puede examinar su estructura ASN.1 mediante OpenSSL :

openssl asn1parse -i -in su_solicitud.p10

Un CSR puede representarse como un PKCS#10 codificado en Base64 ; a continuación se ofrece un ejemplo:

-----INICIAR SOLICITUD DE CERTIFICADO----- MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/ kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y /ArIuM+FBeuno/IV8zvw Ae/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr 9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG 7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i 57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy /YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+ 3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7 -----FIN DE LA SOLICITUD DE CERTIFICADO-----

La estructura ASN.1 de la solicitud de firma de certificado anterior (tal como la analiza 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: SECUENCIA  4:d=1 hl=4 l= 436 cons: SECUENCIA  8:d=2 hl=2 l= 1 prim: ENTERO :00 11:d=2 hl=3 l= 134 cons: SECUENCIA  14:d=3 hl=2 l= 11 contras: CONJUNTO  16:d=4 hl=2 l= 9 cons: SECUENCIA  18:d=5 hl=2 l= 3 prim: OBJETO :nombredelpais 23:d=5 hl=2 l= 2 prim: PRINTABLESTRING :EN 27:d=3 hl=2 l= 13 contras: CONJUNTO  29:d=4 hl=2 l= 11 cons: SECUENCIA  31:d=5 hl=2 l= 3 prim: OBJETO :nombreDeEstadoOProvincia 36:d=5 hl=2 l= 4 prim: UTF8STRING :ninguno 42:d=3 hl=2 l= 13 contras: CONJUNTO  44:d=4 hl=2 l= 11 cons: SECUENCIA  46:d=5 hl=2 l= 3 prim: OBJETO :nombrelocalidad 51:d=5 hl=2 l= 4 prim: UTF8STRING :ninguno 57:d=3 hl=2 l= 18 contras: CONJUNTO  59:d=4 hl=2 l= 16 cons: SECUENCIA  61:d=5 hl=2 l= 3 prim: OBJETO :nombreOrganización 66:d=5 hl=2 l= 9 prim: UTF8STRING :Wikipedia 77:d=3 hl=2 l= 13 contras: CONJUNTO  79:d=4 hl=2 l= 11 cons: SECUENCIA  81:d=5 hl=2 l= 3 prim: OBJETO :nombreDeUnidadOrganizacional 86:d=5 hl=2 l= 4 prim: UTF8STRING :ninguno 92:d=3 hl=2 l= 24 contras: CONJUNTO  94:d=4 hl=2 l= 22 cons: SECUENCIA  96:d=5 hl=2 l= 3 prim: OBJETO :nombrecomún 101:d=5 hl=2 l= 15 prim: UTF8STRING :*.wikipedia.org 118:d=3 hl=2 l= 28 contras: CONJUNTO  120:d=4 hl=2 l= 26 cons: SECUENCIA  122:d=5 hl=2 l= 9 prim: OBJETO :dirección de correo electrónico 133:d=5 hl=2 l= 13 prim: IA5STRING :[email protected] 148:d=2 hl=4 l= 290 cons: SECUENCIA  152:d=3 hl=2 l= 13 cons: SECUENCIA  154:d=4 hl=2 l= 9 prim: OBJETO :rsaEncryption 165:d=4 hl=2 l= 0 prim: NULO  167:d=3 hl=4 l= 271 prim: CADENA DE BITS  442:d=2 hl=2 l= 0 contras: cont [ 0 ]  444:d=1 hl=2 l= 13 cons: SECUENCIA  446:d=2 hl=2 l= 9 prim: OBJETO :md5ConCifradoRSA 457:d=2 hl=2 l= 0 prim: NULO  459:d=1 hl=4 l= 257 prim: CADENA DE BITS 

Esto se generó al proporcionar la codificación base64 en el comando , donde PEM ( Privacy-Enhanced Mail ) es la codificación de las reglas de codificación distinguida ASN.1 en base64.openssl asn1parse -in your_request.p10 -inform PEM -i

Referencias

  1. ^ "Formato de mensaje de solicitud de certificado de infraestructura de clave pública Internet X.509 (CRMF)".
  2. ^ "Nombres distinguidos". Conceptos y mecanismos de seguridad de WebSphere MQ . IBM . 2019-11-05 . Consultado el 2020-01-16 .
  3. ^ ab RFC  2986 - PKCS #10: Especificación de sintaxis de solicitud de certificación versión 1.7
  4. ^ Nikos Mavrogiannopoulos (9 de enero de 2020). "Solicitudes de certificado PKCS #10". GnuTLS . Consultado el 16 de enero de 2020 .