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:
-
El contenido de la estructura certificationRequestInfo se codifica
en formato DER obteniendo de este paso una cadena de bytes
-
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.