PKCS #10. Petición de certificado

Una petición de certificado consiste en un nombre, un clave pública y un conjunto - opcional - de atributos referentes a la persona, entidad, máquina de la que se quiere hacer el certificado, todo esto firmado por la entidad que pide el certificado. Estas peticiones se mandan a una CA - Autoridad Certificadora - que extiende un certificado , basado en la petición, del tipo X.509 o - ya casi en desuso - en un certificado PKCS #6 extendido.

La intención de poner atributos en el certificado tiene dos vertientes:

  • La de incluir otra información sobre la entidad a la que se refiere el certificado como puede ser la dirección completa de la entidad que hace la petición por si el mail no está disponible
  • La de incluir, por ejemplo, un password por el cual la entidad referenciada puede revocar el certificado

  •  

     

    La aplicación tipo de este estándar es la de apoyar al estándar PKCS #7, pero no es la única aplicación de éste estándar.

    Una petición está dividida en tres partes:

  • Información de la petición
  • Un identificador de algoritmo de firma
  • Firma digital de todo lo anterior.

  • El proceso de creación de un PKCS #10 es el siguiente:

  • Un valor tipo CertificationRequestInfo contiene, por lo menos, un nombre y una clave pública, aparte de un conjunto de atributos que hacen referencia a la entidad
  • La estructura CertificationRequestInfo se firma con la clave privada de la entidad.
  • La estructura CertificationRequestInfo, un identificador de algoritmo de firma y la firma creada antes se juntan en otra estructura tipo CertificationRequest.

  • El proceso que sigue la CA al llegarle la petición se basa primero en verificar la firma de la entidad y, si es válida, construye un certificado X.509 en base al nombre y la llave pública que está en la petición de certificado y datos propios del certificado, el nombre de la CA - issuer - , el número de serie del certificado, el periodo de validez y el idenficador de algoritmo de firma, este último de elección propia de la CA. La forma en que la CA le entrega el X.509 al propietario corre a cargo de la misma CA, una forma es enviarle un mail cifrado y firmado. La CA le enviará el certificado, además de otros certificados que la CA considere de ayuda para el cliente, además de una lista de certificados revocados.

    Tipo de datos CertificationRequestInfo en ASN.1:

    CertificationRequestInfo ::= SEQUENCE {
        version Version,
        subject Name,
        subjectPublicKeyInfo SubjectPublicKeyInfo,
        attributes [0] IMPLICIT Attributes
        }
    Version ::= INTEGER
    Attributes ::= SET OF Attribute

    Que significarán:

  • Version es el número de versión de sintaxis con el que se ha hecho el certificado de petición
  • subject es el nombre de la entidad a la que se hace el certificado
  • subjectPublicKeyInfo contine información sobre la clave pública que se certifica como puede ser el algoritmo de clave pública de la entidad - y parámetros asociados - y una cadena de bits que contienen la clave pública de la entidad.
  • attributes es un conjunto de atributos que dan información adicional sobre la entidad a la que se le va a extender el certificado - la clave para revocar el certificado es uno de ellos -.
  • Tipo de datos CertificationRequest en ASN.1:

    CertificationRequest ::= SEQUENCE {
        certificationRequestInfo CertificationRequestInfo,
        signatureAlgorithm SignatureAlgorithmIdentifier,
        signature Signature
        }
    SignatureAlgorithmIdentifier ::= AlgorithmIdentifier
    Signature ::= BIT STRING

    Donde:

  • certificationRequestInfo es la información de la cual se extraerá parte del certificado X.509. Esta es la parte que deberá firmarse.
  • signatureAlgorithm es el identificador de algoritmo de firma que se ha utilizado para firmar la certificationRequestInfo.
  • signature es la firma de certificationRequestInfo.
  •  Proceso de firma

    Simplemente consiste en dos pasos:
    1. El contenido de la estructura certificationRequestInfo se codifica en formato DER obteniendo de este paso una cadena de bytes
    2. La cadena de bytes anterior se firma con la clave privada de la entidad a la que se va a hacer el certificado utilizando el algoritmo especificado en la estructura. Obtenemos de este paso una cadena de bytes que son la firma que se adjuntará en la estructura certificationRequest.