Documento sobre incorporación de certificados en el Directorio.


Recomendación X.509

Introducción.

Definiciones empleadas en la Recomendación X.509.

Autentificación simple.

Autentificación fuerte.

Obtención de la clave pública.

Entorno con múltiples autoridades de certificación.

Gestión de claves y certificados.


Isode y los certificados.

Certificados en Isode IC-R3.

Certificados en Isode IC-R4.

Infraestructura de certificación.

Publicación de certificados en el Directorio.

Recuperación de certificados en ficheros.

Revocación de certificados.


Introducción.

La Norma ISO/IEC o grupo de Recomendaciones CCITT/ITU-T donde se describe el Modelo de Referencia OSI, incluye en su Parte 2 una Arquitectura de Seguridad (CCITT Rec. X.800(1991) | ISO 7498-2). Según esta arquitectura, para proteger las comunicaciones entre distintas aplicaciones es necesario establecer los siguientes servicios de seguridad:

La autentificación, así como otros servicios de seguridad (control de acceso, confidencialidad, no repudio e integridad) únicamente pueden existir en el contexto de una política de seguridad previamente definida.

La Recomendación X.509 define un entorno para la provisión de servicios de autentificación entre distintas entidades, basados en la utilización del Directorio como fuente de información para garantizar dicha autentificación.


Definiciones empleadas en la Recomendación X.509.

Antes de comenzar el estudio de esta Recomendación debemos conocer algunos conceptos importantes.

  • autentificación simple: procedimiento para autentificar a una entidad haciendo uso de una clave.

  • autentificación fuerte: autentificación basada en credenciales encriptadas.

  • autoridad de certificación: es una entidad, digna de confianza para los usuarios, con capacidad para crear y asignar certificados. Opcionalmente puede generar la clave pública y privada de un usuario. El término más usual para referirnos a una autoridad de certificación es la abreviatura en inglés, CA (Certification Authority).

  • certificado: es la clave pública de un usuario, junto con otra información. Un certificado es emitido y firmado digitalmente por una autoridad de certificación.

  • clave privada: dentro de un sistema criptográfico basado en criptografía asimétrica, es la clave de usuario conocida únicamente por él.

  • clave pública: dentro de un sistema criptográfico basado en criptografía asimétrica, es la clave de usuario conocida públicamente.

  • criptografía: técnica que permite hacer ilegible un mensaje.

  • criptografía asimétrica: sistema criptográfico que emplea dos claves, una para cifrar el texto normal y una segunda para descifrar el texto cifrado. Normalmente se conoce como criptografía de clave pública. Ejemplos de algoritmos de clave pública son RSA y El Gamal.

  • criptografía simétrica: sistema criptográfico que emplea la misma clava para cifrar y descifrar. Normalmente se conoce como criptografía de clave secreta. DES e IDEA son ejemplos de algoritmos de clave secreta.

  • firma digital: consiste en aplicar una función hash de un sentido a un texto y después cifrar con la clave privada del firmante.

  • función de un sentido: es una función matemática f, tal que es sencillo calcular f(x), pero muy difícil, en términos computacionales, a partir de y obtener un valor x tal que f(x) = y.

  • función hash: es una función matemática que toma un texto grande y genera una secuencia de longitud fija. La bondad de una función hash se mide por la distribución (aleatoriedad) de los resultados. Habitualmente se denomina hash. Ejemplos de algoritmos hash son MD5 y SHA.

  • política de seguridad: es el conjunto de reglas establecidas por la autoridad competente encargada de la seguridad en los servicios.

  • sistema criptográfico, criptosistema: es una serie de transformaciones que convierten un texto normal en texto cifrado, y viceversa. Las transformaciones emplean algoritmos matemáticos.

Autentificación simple.

Se entiende el uso de la autentificación simple en un entorno local, como vía de autentificación entre procesos pares, por ejemplo, entre un DUA y un DSA o bien entre un DSA y otro DSA.

La autentificación simple se basa en el nombre distinguido (DN) de un usuario, opcionalmente una clave y un acuerdo mutuo entre las dos partes implicadas. Puede realizarse de tres formas:

  1. Transfiriendo el nombre distinguido del usuario y opcionalmente la clave sin encriptar. El procedimiento general se muestra en la imagen izquierda dentro de la Figura 1 donde un usuario envía su nombre distinguido y clave a un DUA (flecha etiquetada con el número 1), éste inicia la secuencia de identificación ante un DSA del Directorio (flecha número 2) que compara la clave aportada con el atributo userPassword correspondiente al nombre distinguido. Tanto si autoriza como no, el Directorio envía la contestación al DUA (flecha número 3) y éste a su vez al usuario (flecha número 4). Este procedimimiento se conoce con el nombre de ``autentificación simple sin protección''.

  2. Aplicar una función de un sentido al nombre distinguido del usuario, la clave y un número aleatorio o marca de tiempo, enviando el resultado.

  3. Transfiriendo la información protegida descrita en el apartado 2) junto con otro número aleatorio o marca de tiempo, tras aplicar una función de un sentido. La Recomendación X.509 no dice si las funciones del apartado 2) y 3) deben ser la misma o distintas. Este procedimiento se conoce como ``autentificación simple protegida'' y se muestra en la imagen derecha de la Figura 1 donde un DUA o DSA envía la información de identificación cifrada a otro DSA (flecha etiquetada con el número 1), este último haciendo uso del nombre distinguido, el contenido del atributo userPassword asociado a dicha entrada, el número aletorio y/o la marca de tiempo que le ha llegado genera una identificación cifrada que compara con la recibida. Tanto si se confirma o deniega la autentificación, se envía el resultado al DUA o DSA inicial.
En el caso de Isode IC-R4.0, un ejemplo de ``autentificación simple sin protección'' sería:
       dbind -call ``Internet=x500.um.es+17003'' -simple -user ``cn=DSA Manager, \
             cn=jaguar, o=Universidad de Murcia, c=ES'' -password ``clave''
Las otros dos tipos de autentificación simple no se han podido probar al no disponer de las librerías criptográficas.


Autentificación fuerte.

La autentificación fuerte o ``strong'' hace uso de las propiedades de los sistemas criptográficos de clave pública. En estos criptosistemas existen un par de claves, una secreta y otra conocida públicamente, ambas asociadas a un usuario particular. La clave pública X{p} puede emplearse por cualquier usuario para cifrar datos. Unicamente X, la persona que posee la clave privada (X{s}), puede descifrar el mensaje. Una propiedad importante de la criptografía asimétrica es la imposibilidad, computacionalmente hablando, de deducir la clave privada a partir de la pública.

Dos usuarios, A y B que desean comunicarse empleando criptografía de clave pública deben disponer cada uno de un par de claves. La clave pública de A la denotamos como A{p} y la clave privada como A{s}. En el caso del usuario B tenemos B{p} y B{s}. Tanto A como B conocen las claves públicas de cada uno. A partir de este momento ambos pueden intercambiar información secreta siguiendo estos pasos:

  1. si A desea transmitir el mensaje x a B lo cifra empleando la clave pública de B

    e = B{p}[x]

    y envía la información cifrada (e) a B.

  2. B descifra el mensaje mediante su clave privada

    x = B{s}[e] = B{s}[B{p}[x]]

A su vez, B empleando los mismos pasos puede enviar datos cifrados al usuario A.

En principio no hemos dicho nada sobre un sistema criptográfico específico. Y esto se debe a que puede emplearse cualquier sistema de criptografía pública. Obviamente, tanto el emisor como el receptor de un mensaje cifrado deben utilizar el mismo para facilitar la correcta codificación y decodificación del mensaje.

En este punto nos queda una duda, ¿cómo obtiene el usuario A la clave pública del usuario B y viceversa? La respuesta es acudir a un repositorio para solicitar la clave pública, y es en este punto donde el Directorio se hace especialmente útil.


Obtención de la clave pública.

Para posibilitar un procedimiento de autentificación entre dos usuarios, cada uno debe obtener la clave pública del otro de un lugar que les merezca confianza. Este sistema se conoce como confianza en una tercera parte (Trusted Third Party) y en el mismo una autoridad de certificación (CA, Certificatio Authority) corrobora que una clave pública es de una determinada entidad, emitiendo el correspondiente certificado.

Un certificado es un documento emitido y firmado por una CA que asocia la identidad de una entidad con su clave pública durante un período de tiempo. Un certificado tiene estas propiedades:

  • cualquier usuario puede recuperar la clave pública contenida en un certificado;

  • ninguna otra entidad excepto la autoridad de certificación puede modificar el certificado sin posibilidad de detectarlo, es decir, los certificados no se pueden falsificar. Esta cualidad permite que los certificados puedan estar en el Directorio sin necesidad de aplicar ninguna media especial de seguridad.
La CA firma digitalmente la clave pública de un usuario, su nombre y otra información adicional haciendo uso de su clave privada. El certificado puede verificarse con la clave pública de la autoridad de certificación.

Un certificado emitido por una autoridad de certificación es una colección de información que incluye, entre otros datos, el nombre distinguido (DN) del usuario y su clave pública, firmada por la CA. Podemos verlo de forma gráfica en la Figura 2.

El proceso de firma digital primero aplica una función hash de un sentido al certificado y posteriormente cifra el resultado con la clave privada de la autoridad de certificación. Si un usuario obtiene un certificado, deberá descifrar la firma de la autoridad de certificación, para obtener el valor de la función hash. Este valor se compara con un nuevo hash calculado a partir del certificado recibido, y si ambos coinciden, la clave pública es diga de todo crédito. Todo este proceso se muestra en la Figura 3.

El formato de un certificado para un usuario con nombre distinguido A e identificador único UA, producido por la autoridad de certificación denominada CA, con identificador único UCA, es el siguiente:

       CA<<A>> = CA{V,NS,AI,CA,UCA,A,UA,A{p},TA}
donde
  • V es la versión del certificado.

  • NS es el número de serie del certificado asignado por la autoridad de certificación. Permite identificar el certificado. Además este valor figura en las listas de revocación, pues identifica cláramente el certificado revocado.

  • AI es el identificador del algoritmo (el algoritmo de firmado se compone de la función hash y el algoritmo de clave pública. Por ejemplo md5withrsa) usado por la autoridad de certificación para firmar el certificado. Es un OID.

  • CA es el nombre distinguido (DN) de la autoridad de certificación.

  • UCA es el identificador único correspondiente a la autoridad de certificación (es opcional).

  • A es el nombre distinguido (DN) del usuario A.

  • UA es el identificador único del usuario A (opcional).

  • A{p} es la clave pública del usuario A (en formato DER).

  • TA indica el período de validez del certificado.
Formalmente, el tipo de dato ASN.1 empleado para representar los certificados es:
Certificate              ::=    SIGNED { SEQUENCE {
    version		    [0] Version DEFAULT v1,
    serialNumber		CertificateSerialNumber,
    signature			AlgorithmIdentifier,
    issuer			Name,
    validity			Validity,
    subject			Name,
    subjectPublicKeyInfo	SubjectPublicKeyInfo,
    issuerUniqueIdentifier  [1] IMPLICIT UniqueIdentifier OPTIONAL,
                                -- if present, version must be v2 or v3
    subjectUniqueIdentifier [2] IMPLICIT UniqueIdentifier OPTIONAL,
                                -- if present, version must be v2 or v3
    extensions              [3] Extensions OPTIONAL
				-- if present, version must be v3 -- }}

Version                  ::=    INTEGER { v1(0), v2(1), v3(2) }

CertificateSerialNumber  ::=    INTEGER

AlgorithmIdentifier      ::=    SEQUENCE {
    algorithm                   ALGORITHM.&id ({SupportedAlgorithms}),
    parameters                  ALGORITHM.&Type ({SupportedAlgorithms}
                                                 {@algorithm}) OPTIONAL}
						
Validity                 ::=    SEQUENCE {
    notBefore                   UTCTime,
    notAfter                    UTCTime }

SubjectPublicKeyInfo     ::=    SEQUENCE {
    algorithm                   AlgorithmIdentifier,
    subjectPublicKey            BIT STRING }

Extensions               ::=    SEQUENCE OF Extension
Extension                ::=    SEQUENCE {
    extnId                      EXTENSION.&id ({ExtensionSet}),
    critical                    BOOLEAN DEFAULT FALSE,
    extnValue                   OCTECT STRING }
En la práctica un certificado podría tener este aspecto:
Certificate:
        Data:
            Version: v3 (0x2)
	    Serial Number: 38 (0x26)
	    Signature Algorithm: PKCS #1 MD5 With RSA Encryption
	    Issuer: CN=CA de la Universidad de Murcia, O=Universidad de Murcia, C=ES
            Validity:
                Not Before: Thu Jul  1 13:16:36 1999
                Not  After: Sun Jun 25 13:16:36 2000
            Subject: E=pepi@fcu.um.es, CN=PEPI GIL VALERA, UID=12345678, OU=Servicio de Informatica, OU=Servicios, O=Universidad de Murcia, C=ES
            Subject Public Key Info:
                Algorithm: PKCS #1 RSA Encryption
                Public Key:
                    Modulus:
00:c5:0b:90:19:2b:36:a7:e4:f9:73:80:26:9d:db:0e:58:8a:
dd:b0:94:e7:15:f3:23:e8:e6:0f:15:35:2d:9a:6f:4e:b9:c6:
cd:cf:35:50:2a:bb:c6:21:ba:eb:db:ab:fd:6f:6f:71:54:3a:
71:ff:a7:b9:97:58:57:3b:4d:58:e9
                    Public Exponent: 65537 (0x10001)
            Extensions:
	        Identifier: Certificate Type
		    Critical: no
		    Certified Usage:
		        SSL Client
		        Secure E-mail
		Identifier: Authority Key Identifier
                    Critical: no
                    Key Identifier:
b4:d1:f9:9e:d6:61:ec:e4:f4:92:06:dc:74:b0:0c:a1:f9:61:
71:44
        Signature:
            Algorithm: PKCS #1 MD5 With RSA Encryption
            Signature:
2f:d4:73:ef:94:bc:0f:9e:46:4c:3a:b4:20:69:56:cd:4e:53:d0:c1:18:
30:6d:fd:2f:92:9f:a2:7e:61:04:04:c3:93:43:38:d2:03:bb:85:e8:6a:
32:b6:47:74:12:bb:ec:82:8d:18:15:42:5a:41:ff:89:c2:94:c8:dd:69:
c9:e7:e7:eb:08:8b:f2:23:80:2f:1b:b4:c3:7f:d4:59:78:54:b4:cc:c4:
ab:b6:5f:6b:c2:18:8a:bb:89:af:f5:0a:68:86:7c:8e:6d:78:4f:7d:60:
b1:53:f9:ba:d9:01:37:e3:18:94:58:5c:67:8e:9d:95:d2:1b:49:0b:04:
31:cc
Si desde un cliente web Netscape recuperamos este certificado podemos ver su contenido, como se muestra en la Figura 4.

Algunas organizaciones pueden necesitar una mayor cantidad de información para gestionar sus certificados. Con este objetivo se emplean las extensiones ISO, permitiendo a la autoridad de certificación la inclusión de aquellos valores que estime necesarios en los certificados y listas de revocación.

En esta estructura de autentificación fuerte hemos supuesto que los usuarios A y B disponen de una par de claves, una pública (A{p}, B{p}) y otra privada (A{s}, B{s}). Ambos confían en un tercer actor, la autoridad de certificación, que firma con su clave privada (CA{s}) las claves públicas, generando los certificados pertinentes. En este punto vemos la necesidad de alojar los certificados de A (CA<<A>>) y B (CA<<B>>) así como de otras informaciones de la autoridad de certificación en el Directorio. Se deduce que en el DIT deben existir tres entradas: una correspondiente al usuario A, otra para el usuario B y una tercera para la autoridad de certificación. En el caso de una entrada asociada a una persona, debe pertenecer a la clase de objeto strongAuthenticationUser e incluir el tipo de atributo userCertificate:

userCertificate                 ATTRIBUTE ::= {
    WITH SYNTAX                 Certificate
    ID                          id-at-userCertificate }
Cuando el usuario A desea una comunicación segura con B accede al Directorio buscando el atributo userCertificate del usuario B. Después del proceso descrito en la Figura 1 obtiene la clave pública de B y puede iniciar la secuencia de autentificación descrita en el Apartado anterior.

En el caso de la autoridad de certificación, existirá en el DIT una entrada de la clase certificationAuthority con los atributos cACertificate, certificateRevocationList y authorityRevocationList.

cACertificate                   ATTRIBUTE ::= {
    WITH SYNTAX                 Certificate
    ID                          id-at-cACertificate }

certificateRevocationList       ATTRIBUTE ::= {
    WITH SYNTAX                 CertificateList
    ID                          id-at-certificateRevocationList }

authorityRevocationList         ATTRIBUTE ::= {
    WITH SYNTAX                 CertificateList
    ID                          id-at-authorityRevocationList }
El atributo cACertificate contiene el certificado de la autoridad de certificación. Sin embargo, los otros dos atributos se utilizan para la gestión de certificados revocados, que vemos a continuación.

Un certificado puede perder su validez (antes de que caduque) porque se supone que la clave privada del usuario ha sido comprometida, la CA no certifica al usuario o porque la clave privada de la CA ha dejado de ser secreta. Este hecho lo difunde públicamente la autoridad de certificación mediante las listas de revocación de certificados, cuya representación en notación ASN.1 es

CertificateList          ::=    SIGNED { SEQUENCE {
    version                     Version OPTIONAL,
                                 -- if present, version must be v2 --
    signature                   AlgorithmIdentifier,
    issuer                      Name,
    thisUpdate                  UTCTime,
    nextUpdate                  UTCTime,
    revokedCertificates         SEQUENCE OF SEQUENCE {
        userCertificate             CertificateSerialNumber,
        revocationDate              UTCTime,
        crlEntryExtensions          Extensions OPTIONAL } OPTIONAL,
    crlExtensions          [0]  Extensions OPTIONAL }} 
Un certificado deja de ser válido en el momento que figura en una lista de revocación. En contraste, los certificados caducados no aparecen en ninguna lista, por tanto, cuando un certificado revocado supera su fecha de validez se elimina de la lista de revocación de certificados.

A grandes rasgos una lista de certificados revocados incluye la CA que ha emitido tal lista de revocación (issuer), la fecha de emisión de la lista (thisUpdate), cuando se cree que volverá a emitir otra lista (nextUpdate) y una secuencia de items, donde cada elemento se compone del número de serie del certificado (si recordamos, identificaba claramente el certificado) y el instante en que ha dejado de tener validez (opcionalmente es posible un tercer campo de extensiones). Por ejemplo, si el certificado de la Figura 4 deja de ser válido, la CA emite una lista donde uno de los items incluye el valor 26 (Serial Number del certificado).

La Recomendación X.509 especifica que cada CA debe mantener dos listas de revocación, una para los certificados que ha emitido y revocado, así como una segunda de certificados que no ha emitido, pero sabe que son revocados. La primera lista se conoce como ``lista de certificados revocados'' (Certificate Revocation List, CRL) y la segunda se denomina ``lista de revocación autorizada''(Authority Revocation List, ARL). Ambas listas corresponden a los atributos certificateRevocationList y authorityRevocationList anteriormente vistos.


Entorno con múltiples autoridades de certificación.

Hasta ahora hemos supuesto una única autoridad de certificación, aunque la realidad es disponer de una jerarquía de autoridades de certificación como se aprecia en la Figura 5.

Si un usuario A desea obtener la clave pública del usuario B debe conseguir el correspondiente certificado de la autoridad de certificación de B. Para facilitar esta búsqueda, las entradas en el Directorio asociadas a autoridades de certificación debe contener certificados de dos tipos. Los primeros se denominan ``certificados directos'' (forward certificates) generados por otras autoridades de certificación y firmados con la clave pública de la CA en cuestión, y los segundos son ``certificados inversos'' (reverse certificates), generados por la propia autoridad de certificación y contienen las claves públicas de otras autoridades de certificación. Estos certificados se alojan en atributos CrossCertificatePair dentro de objetos pertenecientes a la clase certificationAuthority (entradas que representan autoridades de certificación). El tipo de atributo ASN.1 asociado a la especificación del atributo CrossCertificatePair es el siguiente:

CrossCertificatePair            ATTRIBUTE ::= {
    WITH SYNTAX                 CertificatePair
    ID                          id-at-CrossCertificatePair }

CertificatePair         ::=    SEQUENCE {
    forward               [0]  Certificate OPTIONAL,
    reverse               [1]  Certificate OPTIONAL,
    -- at least one of the pair shall be present -- }
Veamos un ejemplo, siguiendo la Figura 5. Si nos fijamos en la autoridad de certificación X, apreciamos un certificado directo (W<<X>>) y dos certificados inversos (X<<W>>, X<<Z>>). Estos certificados se encuentran en dos atributos CrossCertificatePair, uno de ellos contiene el par W<<X>>,X<<W>> y el segundo únicamente X<<Z>>.

Los certificados directos e inverso posibilitan a los usuarios del Directorio la creación de ``rutas de certificados'' (certification paths) de un punto a otro del DIT.

Los tipos de datos ASN.1 que pueden emplearse para representar rutas de certificados son:

CertificationPath        ::=    SEQUENCE {
    userCertificate             Certificate,
    theCACertificates           SEQUENCE OF CertificatePair OPTIONAL }

CertificatePair          ::=    SEQUENCE {
    forward                [0]  Certificate OPTIONAL,
    reverse                [1]  Certificate OPTIONAL,
    -- at least one of the pair shall be present -- }

Certificates             ::=    SEQUENCE {
    userCertificate             Certificate,
    certificationPath           ForwardCertificationPath OPTIONAL }

ForwardCertificationPath ::=    SEQUENCE OF CrossCertificates

CrossCertificates        ::=    SET OF Certificate
La lista de certificados que precisa un usuario para obtener la clave pública de otro usuario se conoce con el nombre de ruta de certificación (certification path). Entonces la ruta de certificación de A a B sería:
       X<<W>>,W<<V>>,V<<Y>>,Y<<Z>>,Z<<B>>
Sin embargo, en la práctica, la cantidad de información a recuperar del Directorio para construir la ruta directa e inversa de certificación puede reducirse:
  • si los dos usuarios que se quieren comunicar emplean la misma autoridad de certificación, entonces la ruta de certificación es trivial, pudiendo intercambiar sus certificados directamente.

  • si las autoridades de certificación de ambos usuarios son distintas, cada uno podría almacenar las claves públicas, certificado directos e inversos de todas las autoridades de certificación existentes entre la suya y la raíz del DIT. De este modo, en el momento de la autentificación únicamente se debería obtener la ruta desde la autoridad común de certificación presente en la jerarquía.

  • si un usuario se comunica frecuentemente con usuarios certificados que tienen en común la misma autoridad de certificación, entonces este usuario podría guardar la ruta de certificación hasta la autoridad de certificación del grupo de usuarios, y en el instante de la comunicación sólo debería obtener el certificado del destinatario.

  • las autoridades de certificación pueden intercambiar certificados previo ``acuerdo bilateral'' (bilateral agreement). El resultado es una ruta de certificación más corta.

  • si dos usuarios se han comunicado con anterioridad, pueden almacenar el certificado respectivo, así pueden autentificarse sin recurrir al Directorio.
La Recomendación X.509 no indica nada sobre la distribución jerárquica de las autoridades de certificación a lo largo del DIT. No obstante, en el RFC 1.422 se define una jerarquía de autoridades de certificación, cuya raíz se denomina Internet Policy Registration Authority (IPRA) y su DN sería <OU=Internet PCA Registration Authority, o=Internet Society>. Seguidamente estarían las Policy Certification Authorities (PCAs), certificadas por la IPRA. En los niveles inferiores existirían una serie de Certification Autorities (CAs).


Gestión de claves y certificados.

Dentro de la infraestructura de seguridad es de vital importancia que las claves privadas sólo sean conocidas por su propietario. Como una clave privada es algo difícil de recordar, debemos disponer de medios adecuados para transportar y utilizar las claves. Una de las posibilidades es hacer uso de una ``tarjeta inteligente'' (smartcard) donde guardar la clave privada, opcionalmente la clave pública, el certificado del usuario y una copia de la clave pública de la autoridad de certificación (la Recomendación no indica nada sobre el método a utilizar para almacenar estos datos). La recuperación de esta información implica introducir un ``número de identificador personal'' (Personal Identification Number, PIN), conocido exclusivamente por la persona propietaria de la tarjeta inteligente.

Respecto a la generación de la clave, son posibles tres situaciones:

  1. el usuario genera su par de claves. Este método tiene la ventaja adicional de que la clave privada del usuario no es conocida por otra entidad.

  2. las claves las genera una tercera entidad, enviando la clave privada al usuario empleando un medio físico seguro y destruyendo la información empleada en la generación del certificado así como los certificados.

  3. una autoridad de certificación genera la pareja de claves. Este método tiene la virtud de no requerir transferencias de datos seguras a la CA antes de la emisión del certificado.
Si recordamos, un certificado asocia la clave pública a un nombre distinguido (DN). En consecuencia:
  • una autoridad de certificación debe corroborar la identidad de un usuario antes de crear un certifado;

  • una autoridad de certificación no emitirá certificados para dos usuarios con el mismo nombre.
La producción de certificados debe realizarse ``offline'', así la clave privada de la autoridad de certificación nunca será conocida. Tan solo un ataque directo a la CA puede comprometer la clave privada de la misma.

Una vez generado el certificado, no se precisan medidas de seguridad especiales en el proceso de traslado al Directorio.

Los certificados emitidos incluirán un límite de validez, pero es posible que el usuario decida revocarlo antes de la fecha de caducidad, entonces:

  • la revocación debe ser conocida por la CA, que informará al propietario de este hecho empleando algún procedimiento ``off-line''.

  • La CA deberá mantener una lista de certificados revocados con una ``marca de tiempo'' (time-stamped) generados por ella y una segunda lista de de certificados revocados con marca de tiempo de otras autoridades de certificación, certificados por la CA.

  • El mantenimiento de las entradas en el Directorio afectadas por las listas de revocación de la CA es responsabilidad del Directorio y sus usuarios, en base a una política de seguridad.

  • Finalmente, las listas de revocación se encuentran en las entradas como atributos de los tipos certificateRevocationList y authorityRevocationList. Estos atributos pueden manejarse empleando las mismas operaciones disponibles para otros atributos.


Certificados en Isode IC-R3.

Las primeras pruebas de inclusión de certificados en el Directorio comenzaron con la anterior versión de Isode (IC-R3.1). Gracias a la ayuda de Javier Masa (RedIRIS) fué posible incluir certificados. Para ello modificamos el fichero oidtable.at, añadiendo un nuevo atributo:

userCertificate;binary:             attributeType.36.1      :Audio:file
Como se aprecia, estamos engañando al Directorio, indicándole como tipo de dato un archivo de audio. Sin embargo, estamos almacenando un certificado en formato DER. Todavía queda un segundo cambio en el fichero oidtable.oc, donde la línea
strongAuthenticationUser: standardObjectClass.15  : top : userCertificate
pasó a tener este formato
strongAuthenticationUser: standardObjectClass.15  : top : : userCertificate, userCertificate;binary
Veamos una entrada correspondiente a un fichero EDB donde alojamos un certificado:
cn=PEPI GIL VALERA
objectClass= top & person & organizationalPerson & strongAuthenticationUser & pilotObject & newPilotPerson & quipuObject
cn= PEPI GIL VALERA
sn= GIL VALERA
description= {T.61}Servicio de Inform\c2atica
businessCategory= Programadora
telephoneNumber= +34 968 364222
facsimileTelephoneNumber= +34 968 364151
userCertificate;binary={FILE}/usr/isode/etc/quipu-db/c=ES/UM/ou=Servicios/cpd-um/cn=PEPI GIL VALERA.userCertificate;binary
mail= pepi\40fcu.um.es
roomNumber= {T.61}Servicio de Inform\c2atica - Sala Iris
lastModifiedTime= 980903114116Z
lastModifiedBy= c=ES@o=Universidad de Murcia@cn=Quipu Manager
jpegPhoto={FILE}/usr/isode/etc/quipu-db/c=ES/UM/ou=Servicios/cpd-um/cn=PEPI GIL VALERA.jpegPhoto
Como vemos, un certificado se manipula (a la hora de incluirlo manualmente en el fichero EDB) como si fuese una fotografía.

El requisito necesario es que el certificado esté en formato DER. De este modo un cliente web Netscape pueda recuperarlo sin problemas (ver Figura 4).


Certificados en Isode IC-R4.

La versión IC-R4 incluye una autoridad de certificación, pero al no disponer de las librerías criptográficas no hubo posibilidad de probar esta herramienta. Por ello continuamos con la autoridad de certificación Netscape Certificate Server. Intentamos el mismo truco, simulando ficheros de sonido, sin éxito alguno. Además los certificados se recuperaban directamente en binario vía LDAP. Estas dos circunstancias obligaron a una nueva solución, donde debíamos modificar el fichero oidtable.at, en concreto las líneas

userCertificate:                attributeType.36        :Certificate
cACertificate:                  attributeType.37        :Certificate
pasaron a tener este aspecto:
userCertificate:                attributeType.36        :file
cACertificate:                  attributeType.37        :file
Ahora el truco consiste en camuflar el certificado como un fichero. Afortunadamente el proceso manual de introducción de certificados se automatizó gracias a la posibilidad de carga de entradas empleando ficheros en formato LDIF.
dn: cn=PEPI GIL VALERA, ou=Servicio de Informatica, ou=Servicios, o=Universidad de Murcia, c=ES
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: newPilotPerson
objectclass: organizationalPerson
cn: PEPI GIL VALERA
sn: GIL VALERA
telephonenumber: +34 968 364222
facsimileTelephoneNumber= +34 968 364151
uid: 77777777
rfc822Mailbox: prueba@fcu.um.es
roomNumber= {T.61}Servicio de Inform\c2atica - Sala Iris
description: {T.61}Servicio de Inform\c2atica
businessCategory: Programadora
usercertificate;binary:< file:/certificados/pepi.der
jpegPhoto:< file:/fotos/pepi.jpeg
Como en el caso anterior, la recuperación de certificados en formato DER es cuestión de los clientes web Netscape (ver Figura 4).


Infraestructura de certificación.

Hasta ahora se ha indicado "el truco" para almacenar un certificado en el Directorio. Pero todo esto se engloba dentro de una infraestructura de certificación.

Lo primero que debemos analizar es el proceso de generación de certificados. Como se muestra en la Figura 6 disponemos de un usuario que tiene un carnet inteligente (nos atenemos a lo que aconseja la Recomendación X.509) y desea disponer de su correspondiente par de claves (privada y pública). Esta persona acude a un lugar donde se comprueba su identidad (por ejemplo, en el caso de un alumno podría ser la secretaría de su Escuela o Facultad). La entidad que comprueba si esa persona es realmente quien dice ser se denomina Autoridad de Registro (en inglés Registry Authority, RA). Este paso es importante para evitar suplantaciones y evitar nombres distinguidos repetidos, como ya se comentó en la Recomendación X.509.

La RA envía las peticiones a la Autoridad de Certificación (en inglés Certification Authority, CA) mediante un canal cifrado SSL. En teoría la CA se encuentra off-line (es decir, podemos considerarla una máquina aislada de la red que abre un puerto de comunicaciones en un instante dado y recibe las peticiones almacenadas de las distintas RAs. Como se puede suponer, la comunicación es unidireccional).

La CA genera el par de claves para el usuario, firma la clave pública del mismo, generando el correspondiente certificado, que deposita en el Directorio. El proceso para la clave privada se detalla en el artículo "Experiencia piloto de certificación en la Universidad de Murcia" incluido en el Boletín de RedIRIS nº 46-47.

En este punto, desde el punto de vista del Directorio, destacan tres objetos participantes en esta infraestructura:

  • el usuario;

  • la RA;

  • la CA.
Ya hemos visto lo necesario para la inclusión y recuperación de certificados de un usuario. Por tanto pasemos a ver la entrada correspondientes a la autoridad de registro, cuyo fichero LDIF es el siguiente:
dn: cn=RA, cn=jaguar, o=Universidad de Murcia, c=ES
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: RA
sn: RA
uid: 88888888
mail: ra@fcu.um.es
description: Autoridad de Registro
telephonenumber: +34 968 364222
userCertificate;binary:< file:/certificados/ra.der
Podemos apreciar que es análoga a cualquier entrada asociada a una persona.

En el caso de la CA, el fichero LDIF es distinto:

dn: cn=CA de la Universidad de Murcia, o=Universidad de Murcia, c=ES
objectclass: top
objectclass: person
objectclass: AuthenticationUser
objectclass: certificationAuthority
cn: CA de la Universidad de Murcia
sn: Universidad de Murcia
telephonenumber: +34 968 364222
description: CA Piloto de la Universidad de Murcia
userCertificate;binary:< file:/certificados/ca.der
cACertificate;binary:< file:/certificados/ca.der
authorityRevocationList;binary:< file:/certificados/crl.der
certificateRevocationList;binary:< file:/certificados/crl.der
Si recordamos la Recomendación X.509, esta entrada pertenece a la clase certificationAuthority e incluye los atributos cACertificate (certificado de la CA en formato DER), certificateRevocationList y authorityRevocationList (listas de certificados revocados).


Publicación de certificados en el Directorio.

El software "Netscape Certificate Server" genera los certificados y mediante LDAP accede a nuestro servidor Isode IC-R4 para depositar los certificados de los usuarios. El proceso es sencillo, en la parte de configuración "Certificate Service" seleccionamos "Directory Server" y dentro de esta ventan se indica:

  • nombre;

  • puerto (389 por defecto);

  • si se utiliza SSL para las consultas LDAP (al disponer de Isode, no utilizamos SSL);

  • DN del usuario del Directorio con permisos de escritura;

  • atributos empleados para las búsquedas en el Directorio: en la primera parte "Components to form the subject's DN in the directory:" debe indicarse los atributos que forman parte del certificado y a la vez están en el DN de las entradas del Directorio (en nuestro caso es CN, OU, O y C) y en la segunda parte "Components to match attributes in the directory entry:", se indican los atributos que forman parte del certificado, pero no están en el DN de las entradas del Directorio (en nuestro caso uid y mail).
Según Isode en los accesos LDAP no es posible al autentificación fuerte, siendo el mayor nivel de "seguridad" la autentificación simple. Esta circinstancia adversa nos obligan a disponer la CA y el servidor Isode en un segmento de red aislado para evitar cualquier intrusión, además la comunicación es unidireccional entra la CA y el servidor Isode IC-R4.

Esta parte puede mejorarse integrando SSL en Isode, o redireccionando puertos en conexiones SSL. Estamos estudiando distintas posibilidades.


Recuperación de certificados en ficheros.

El proceso de carga de entradas en el Directorio incluye toda la información de una persona, a excepción de su certificado, pues es competencia de la CA. Cuando la autoridad de certificación publica el certificado sencillamente rellena el atributo userCertificate que estaba vacío. Esto nos llevó a estudiar la posibilidad de recuperar los certificados y almacenarlos en ficheros binarios (por ejemplo si borramos accidentalmente la entrada debería publicarse otra vez el certificado).

Los scripts que "capturan" certificados y los guardan en ficheros binarios se encuentran explicado en la página "Recuperación de atributos en formato ASN o BASE64".


Revocación de certificados.

Cuando se cumple alguna de las situaciones indicadas en la Recomendación X.509 el certificado es revocado por la CA. El proceso consiste en:

  • eliminar el certificado del atributo userCertificate en el Directorio;

  • generar una nueva lista de certificados revocados (donde figura el número de serie del certificado revocado) para actualizar el atributo certificateRevocationList de la entrada correspondiente a la CA en el Directorio.
Una lista de certificados revocados contiene una serie de items, cada uno incluye el número de serie del certificado (único para cada certificado. Una de las tareas de la CA es llevar una anotación de los números de serie de los certificados que ha emitido. Gracias a ella puede gestionar la emisión y revocación de certificados) así como la fecha de revocación del certificado (instante en el que ha dejado de ser válido).

Servicio de Informática de la Universidad de Murcia - http://www.um.es/si
Última actualización: 22/06/99