Para habilitar las conexiones SSL/TLS hacia el servidor LDAP, se necesita la presencia de un certificado en el servidor. Además, en el establecimiento de una conexión SSL/TLS, el certificado del servidor sólo proporciona una conexión segura y cifrada al servidor. Si se desea autentificar al cliente, se ha de presentar al servidor LDAP el certificado y el par de llaves del cliente.
Existen dos formas de crear e instalar un certificado en el servidor: la creación de un “certificado autofirmado” y la creación de un “certificado emitido por una CA”. Ambos métodos requieren la creación de un certificado para el servidor, enviárselo a los clientes OpenLDAP y realizar los cambios apropiados en los archivos de configuración de OpenLDAP. Ambos métodos necesitan el uso de órdenes OpenSSL que solicitarán información para la creación del certificado.
![]() | Nota |
---|---|
Para la elaboración de esta documentación se ha elegido la creación de un certificado a partir de una CA (Sección 4.2.2, “Certificado emitido por una CA”) y sobre este método se basará el resto de la documentación. De todas formas, se ha incluido en la Sección 4.2.1, “Certificado autofirmado” el otro método existente, a título informativo. |
![]() | Aviso |
---|---|
Cuando se pregunte por el “Common Name”, ha de teclear el nombre del dominio de su servidor (FQDN), como por ejemplo: miservidor.pt, y no “su nombre” como sugiere OpenSSL. ¡Esta equivocación es la causa del 90% de los errores en el el certificado del servidor! |
La primera forma para la creación del certificado del servidor emplea OpenSSL y genera un certificado autofirmado para el servidor. Para ello, desde la línea de comandos se ha de teclear (la letra en negrita son las opciones que ha de introducir el usuario):
![]() | Nota |
---|---|
OpenLDAP sólo trabaja con llaves no cifradas, por lo que se ha de emplear el parámetro “-nodes” de OpenSSL para evitar el cifrado de la llave privada. |
Ejemplo 4.1. Creación de un certificado autofirmado para el servidor
$ openssl req -newkey rsa:1024 -x509 -nodes -out server.pem -keyout server.pem -days 365 Generating a 1024 bit RSA private key ..........................++++++ ...............................++++++ writing new private key to 'server.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:PT State or Province Name (full name) [Some-State]:Braganca Locality Name (eg, city) []:Braganca Organization Name (eg, company) [Internet Widgits Pty Ltd]:gsr.pt Organizational Unit Name (eg, section) []:gsr.pt Common Name (eg, YOUR name) []:gsr.pt Email Address []:sergio@gsr.pt |
Esto creará un archivo server.pem en el directorio donde haya ejecutado la orden del Ejemplo 4.1, “Creación de un certificado autofirmado para el servidor”. Puede ver una muestra de su resultado en el Apéndice O, Ejemplo de certificado para un servidor.
Ahora sólo falta indicar a OpenLDAP que utilice el certificado anteriormente creado. El siguiente ejemplo muestra las opciones de configuración que han de añadirse al archivo /etc/ldap/slapd.conf si se ha seguido el método de creación del certificado autofirmado.
Ejemplo 4.2. Opciones de configuración para slapd.conf que añaden un certificado autofirmado en el servidor.
TLSCACertificateFile server.pem TLSCertificateFile server.pem TLSCertificateKeyFile server.pem |
![]() | Nota |
---|---|
Puede observarse en el ejemplo anterior, que las tres opciones poseen el mismo valor: “server.pem”. Esto diferirá si se ha obtenido el certificado a partir de una CA, como puede verse en el Ejemplo 4.9, “Líneas de configuración para un servidor SSL/TLS”. |
Si ya posee una entidad certificadora (CA) de confianza, sáltese esta sección dedicada al proceso de obtención de un certificado firmado por una entidad certificadora y una llave privada para el servidor.
Sin embargo, si no posee de una entidad certificadora de confianza, OpenSSL realiza el proceso rápida y fácilmente. Para ello siga los siguientes pasos:
Creación de un directorio para crear y firmar los certificados, por ejemplo: /var/tmp/mica
Sitúese en el directorio /var/tmp/mica y ejecute el script CA.sh de OpenSSL.
Ejemplo 4.4. Creación de una entidad certificadora
Esto creará la siguiente estructura de directorios bajo /var/tmp/mica:
$ /usr/bin/tree . `-- demoCA |-- cacert.pem |-- certs |-- crl |-- index.txt |-- newcerts |-- private | `-- cakey.pem `-- serial 5 directories, 4 files |
Pero los archivos realmente interesantes son demoCA/cacert.pem y demoCA/private/cakey.pem (El certificado de la entidad certificadora y la llave privada, respectivamente).
Creamos la petición para la firma del certificado perteneciente al servidor (CSR):
Ejemplo 4.5. Creación de la petición para la firma del certificado del servidor
El resultado es el archivo newreq.pem.
Ejemplo 4.6. Firma del CSR
$ /usr/lib/ssl/misc/CA.sh -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem:[Clave ca] Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Sep 23 16:16:11 2004 GMT Not After : Sep 23 16:16:11 2005 GMT Subject: countryName = PT stateOrProvinceName = Braganca localityName = Braganca organizationName = SubGSR organizationalUnitName = Controle de acesso commonName = gsr.pt emailAddress = sergio@gsr.pt X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 8C:66:2C:3E:0F:63:2F:53:29:FA:28:EA:7F:59:A4:16:4C:DF:7C:6C X509v3 Authority Key Identifier: keyid:F1:34:77:80:A4:34:4B:71:C8:BF:81:6C:DF:0C:98:D3:62:B7:10:BE DirName:/C=PT/ST=Braganca/L=Braganca/O=Companhia GSR/OU=Unidade de\ certificados/CN=gsr.pt serial:00 Certificate is to be certified until Sep 23 16:16:11 2005 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=PT, ST=Braganca, L=Braganca, O=Companhia GSR, OU=Unidade de certificados,\ CN=gsr.pt Validity Not Before: Sep 23 16:16:11 2004 GMT Not After : Sep 23 16:16:11 2005 GMT Subject: C=PT, ST=Braganca, L=Braganca, O=SubGSR, OU=Controle de acesso, \ CN=gsr.pt/emailAddress=sergio@gsr.pt Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ab:bc:62:aa:75:ad:76:6d:05:e6:be:c2:b7:b7: 1f:28:3a:b9:ed:0b:b2:11:6a:9d:27:7b:06:69:89: 3a:13:3d:29:85:0d:02:87:b7:ac:cf:46:b0:01:3a: 30:c6:2e:25:13:af:6f:35:b6:d0:2c:ae:fb:42:24: 77:f3:c7:e1:a6:cb:00:35:ca:03:be:b1:d8:dd:22: de:d6:bc:e2:94:d4:1a:ae:47:83:95:0c:a2:ae:1f: c3:d3:f4:1d:7e:cd:cc:9c:48:28:63:35:5c:af:7b: c9:bf:f8:f7:de:2b:09:61:c6:40:30:76:e3:9f:51: 28:d0:61:b2:18:9a:d9:8a:53 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 8C:66:2C:3E:0F:63:2F:53:29:FA:28:EA:7F:59:A4:16:4C:DF:7C:6C X509v3 Authority Key Identifier: keyid:F1:34:77:80:A4:34:4B:71:C8:BF:81:6C:DF:0C:98:D3:62:B7:10:BE DirName:/C=PT/ST=Braganca/L=Braganca/O=Companhia GSR/OU=Unidade de \ certificados/CN=gsr.pt serial:00 Signature Algorithm: md5WithRSAEncryption 27:43:54:46:14:dd:f5:2d:64:40:b4:dd:62:b4:79:d6:93:32: d4:56:0d:a7:80:60:6a:93:1a:c2:02:e3:f8:33:d9:4d:32:c7: 0b:34:29:01:72:98:1a:aa:c6:34:78:50:11:0d:92:ab:31:ba: 9b:3f:27:39:1a:19:8b:a0:2c:d7:ca:56:04:69:c4:ae:cc:e5: dc:fa:ce:da:11:a9:25:0c:db:d6:8c:60:b1:86:9a:02:06:c5: c4:da:8f:8e:a6:4d:84:06:3d:e1:ce:3e:d9:fa:d4:5b:d5:44: 36:4f:48:88:d0:ab:ec:03:e5:a7:4f:92:e8:8e:db:aa:89:7e: 02:e4 -----BEGIN CERTIFICATE----- MIIDkDCCAvmgAwIBAgIBATANBgkqhkiG9w0BAQQFADB+MQswCQYDVQQGEwJQVDER MA8GA1UECBMIQnJhZ2FuY2ExETAPBgNVBAcTCEJyYWdhbmNhMRYwFAYDVQQKEw1D b21wYW5oaWEgR1NSMSAwHgYDVQQLExdVbmlkYWRlIGRlIGNlcnRpZmljYWRvczEP MA0GA1UEAxMGZ3NyLnB0MB4XDTA0MDkyMzE2MTYxMVoXDTA1MDkyMzE2MTYxMVow gZAxCzAJBgNVBAYTAlBUMREwDwYDVQQIEwhCcmFnYW5jYTERMA8GA1UEBxMIQnJh Z2FuY2ExDzANBgNVBAoTBlN1YkdTUjEbMBkGA1UECxMSQ29udHJvbGUgZGUgYWNl c3NvMQ8wDQYDVQQDEwZnc3IucHQxHDAaBgkqhkiG9w0BCQEWDXNlcmdpb0Bnc3Iu cHQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKu8Yqp1rXZtBea+wre3Hyg6 ue0LshFqnSd7BmmJOhM9KYUNAoe3rM9GsAE6MMYuJROvbzW20Cyu+0Ikd/PH4abL ADXKA76x2N0i3ta84pTUGq5Hg5UMoq4fw9P0HX7NzJxIKGM1XK97yb/4994rCWHG QDB2459RKNBhshia2YpTAgMBAAGjggEJMIIBBTAJBgNVHRMEAjAAMCwGCWCGSAGG +EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU jGYsPg9jL1Mp+ijqf1mkFkzffGwwgaoGA1UdIwSBojCBn4AU8TR3gKQ0S3HIv4Fs 3wyY02K3EL6hgYOkgYAwfjELMAkGA1UEBhMCUFQxETAPBgNVBAgTCEJyYWdhbmNh MREwDwYDVQQHEwhCcmFnYW5jYTEWMBQGA1UEChMNQ29tcGFuaGlhIEdTUjEgMB4G A1UECxMXVW5pZGFkZSBkZSBjZXJ0aWZpY2Fkb3MxDzANBgNVBAMTBmdzci5wdIIB ADANBgkqhkiG9w0BAQQFAAOBgQAnQ1RGFN31LWRAtN1itHnWkzLUVg2ngGBqkxrC AuP4M9lNMscLNCkBcpgaqsY0eFARDZKrMbqbPyc5GhmLoCzXylYEacSuzOXc+s7a EaklDNvWjGCxhpoCBsXE2o+Opk2EBj3hzj7Z+tRb1UQ2T0iI0KvsA+WnT5Lojtuq iX4C5A== -----END CERTIFICATE----- Signed certificate is in newcert.pem |
Esto crea el archivo newcert.pem (el certificado del servidor firmado por la entidad certificadora) con la clave privada, newreq.pem.
Ahora se puede renombrar y mover los certificados al sitio deseado. En este caso se moverá al directorio /etc/ldap/ssl, quedando la estructura final como sigue:
Ejemplo 4.8. Estructura de directorios final para los certificados
![]() | Este archivo se corresponde con el archivo newcert.pem generado tras el Ejemplo 4.6, “Firma del CSR” |
![]() | Este archivo se corresponde con el archivo newreq.pem generado tras el Ejemplo 4.6, “Firma del CSR” |
![]() | Importante | |
---|---|---|
Sería recomendable hacer la llave privada del servidor sólo legible por el usuario con el que se ejecuta slapd, para ello teclee:
Los demás certificados tendría que poderse leer por todo el mundo. |
Hacer que el certificado de la entidad certificadora esté disponible para los clientes de LDAP.
Si los clientes están en la misma máquina, se ha de copiar el archivo cacert.pem a un lugar accesible por los clientes. Si los clientes están en otros equipos, se ha de copiar el archivo cacert.pem a esas máquinas y hacerlo accesible.
Como se ha podido apreciar, este proceso requieres algunos pasos más que la creación un certificado autofirmado, pero los beneficios obtenidos sobrepasan cualquier gasto de tiempo empleado en crear la entidad certificadora.
Los certificados para los clientes se crean de forma similar a los certificados para el servidor. Si se siguen los pasos detallados en Sección 4.2.2, “Certificado emitido por una CA”, los únicos cambios son los siguientes:
1 y 2: No se hace nada... no se necesita crear de nuevo la entidad certificadora. El objetivo es utilizar la misma entidad certificadora para firmar el certificado del cliente.
3: Se ejecuta todo lo que allí se muestra, lo único que se ha de cambiar es el nombre del servidor por el del cliente cuando se pregunte el “Common Name”. Se da por supuesto que todas las demás respuestas se han de ajustar a los datos del cliente.
4: Las mismas órdenes, obteniéndose los mismos archivos para el certificado y la llave privada. ¡Gracias que se renombró el certificado en el 5!.
5: Ahora se puede renombrar y mover el certificado y la llave privada del cliente al lugar indicado (por ejemplo, /home/usuario/ssl/[10]). También sería recomendable que cambiase los permisos de la llave privada, para que sólo pueda ser leída por el usuario al que pertenece.
6: No se ha de hacer nada en este paso.
Ahora que ya están creados los certificados, sólo queda configurar OpenLDAP.
[10] Tenga en cuenta que el directorio donde almacene el certificado del usuario ha de ser accesible por todo el mundo.