Para habilitar las conexiones SSL/TLS hacia el servidor, se necesita la presencia de un certificado en el servidor por parte de los protocolos SSL/TLS. Además, en el establecimiento de una conexión SSL, el certificado del servidor sólo proporciona una conexión segura y encriptada al servidor. Si se desea autentificar al cliente, se ha de presentar al servidor LDAP el certificado certificado y el par de llaves del cliente.
Hay dos formas de crear e instalar un certificado en el servidor. Ambos métodos requieren la creación de un certificado para el servidor, enviárselo a los clientes OpenLDAP y realizar los cambios apropiados a los archivos de configuración de OpenLDAP. Ambos métodos necesitan el uso de comandos OpenSSL que solicitarán información para la creación del certificado.
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 encriptadas, por lo que se ha de emplear el parámetro “-nodes” de OpenSSL para evitar la encriptación 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 el comando del Ejemplo 4.1, “Creación de un certificado autofirmado para el servidor”. Puede ver una muestra en el Apéndice A, Ejemplo de certificado para un servidor.
Ahora sólo falta indicar a OpenLDAP que utilice el certificado anteriormente creado. Para ello se han de añadir las siguientes líneas al archivo de configuración de slapd, /etc/ldap/slapd.conf:
Ejemplo 4.2. Opciones de configuración para slapd.conf que añaden un certificado en el servidor (para más detalles, vea el Apéndice P, Archivo de configuración /etc/ldap/slapd.conf).
TLSCACertificateFile server.pem TLSCertificateFile server.pem TLSCertificateKeyFile server.pem |
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 la creación de un certificado y una llave privada para el servidor.
Sin embargo, si no posee de una entidad certificadora de confianza, OpenSSL realiza el mismo 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 con 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: Mar 9 23:25:59 2004 GMT Not After : Mar 9 23:25:59 2005 GMT Subject: countryName = PT stateOrProvinceName = Braganca localityName = Braganca organizationName = gsr.pt organizationalUnitName = gsr.pt commonName = gsr.pt emailAddress = sergio@gsr.pt X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 6D:5B:86:85:67:82:40:81:1A:00:17:13:6A:55:87:C6:0F:AE:0B:2F X509v3 Authority Key Identifier: keyid:FD:76:7B:FA:EB:98:03:6D:8C:D6:AF:2F:65:DD:0A:62:BB:79:66:58 DirName:/C=PT/ST=Braganca/L=Braganca/O=gsr.pt/OU=gsr.pt/CN=gsr.pt/\ emailAddress=sergio@gsr.pt serial:00 Certificate is to be certified until Mar 9 23:25:59 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=gsr.pt, OU=gsr.pt, \ CN=gsr.pt/emailAddress=sergio@gsr.pt Validity Not Before: Mar 9 23:25:59 2004 GMT Not After : Mar 9 23:25:59 2005 GMT Subject: C=PT, ST=Braganca, L=Braganca, O=gsr.pt, OU=gsr.pt, \ CN=gsr.pt/emailAddress=sergio@gsr.pt Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b7:19:89:78:17:a5:89:74:65:fe:57:23:3b:53: e0:49:81:bb:12:71:6b:28:90:09:73:1f:7f:88:d5: 0a:1e:f1:c7:13:7a:e0:48:f7:ff:1a:92:bf:35:31: 6d:df:ad:95:09:1d:12:0e:59:8f:b8:b5:ef:43:92: e6:e0:f2:cd:db:85:bc:70:d6:d5:f7:a3:12:f5:52: 20:2a:55:40:10:1f:f7:bd:5c:ef:d7:db:33:f9:4e: f5:c7:6f:a5:07:15:c0:74:b2:98:ff:13:d7:6f:19: 16:c5:f9:d9:47:b5:91:22:5b:f1:fe:05:ee:5b:af: 00:18:93:47:e2:ff:04:7e:1b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 6D:5B:86:85:67:82:40:81:1A:00:17:13:6A:55:87:C6:0F:AE:0B:2F X509v3 Authority Key Identifier: keyid:FD:76:7B:FA:EB:98:03:6D:8C:D6:AF:2F:65:DD:0A:62:BB:79:66:58 DirName:/C=PT/ST=Braganca/L=Braganca/O=gsr.pt/OU=gsr.pt/\ CN=gsr.pt/emailAddress=sergio@gsr.pt serial:00 Signature Algorithm: md5WithRSAEncryption 05:49:b1:11:79:97:b9:0e:23:c1:1f:65:c1:8d:51:0d:b4:06: b8:39:a1:74:6f:e1:ce:5b:45:56:b7:6c:09:f1:7c:ec:24:62: 03:8e:8a:f6:6c:4a:88:20:d9:33:95:fe:22:2a:92:b5:cb:3f: 6e:97:74:45:4a:68:26:80:62:d3:4b:17:cf:41:96:e8:47:41: 77:26:67:33:8e:72:f3:87:10:a1:c1:21:89:1c:55:26:ab:d4: c6:26:a0:9a:f7:ef:e6:4e:62:27:47:9f:16:0f:a2:0d:45:ae: d1:82:0a:2e:c0:ae:d3:05:e7:f2:3a:a2:9f:84:af:d9:4f:21: c2:f8:a3:13:db:2b:62:53:4b:7f:03:89:ef:ec:af:7d:6c:04: 05:f8:9b:c8:67:4c:10:1d:09:15:3a:6b:d2:06:83:88:69:e6: eb:f3:fe:03:8a:eb:a6:48:8b:f8:f0:7e:ab:05:31:24:15:86: d0:69:84:f3:ec:da:97:58:74:36:3f:47:ba:1a:8b:9a:61:f5: 9d:16:dc:6e:1c:20:f5:65:f7:21:8d:39:4c:29:5d:4e:ef:b0: df:07:d3:e3:95:24:94:67:78:d5:57:bf:26:14:60:44:45:c2: 74:6a:00:d6:f7:d3:a4:52:fb:69:1c:a7:38:73:7b:35:4d:fe: 02:43:82:65 -----BEGIN CERTIFICATE----- MIIEEzCCAvugAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhDELMAkGA1UEBhMCUFQx ETAPBgNVBAgTCEJyYWdhbmNhMREwDwYDVQQHEwhCcmFnYW5jYTEPMA0GA1UEChMG Z3NyLnB0MQ8wDQYDVQQLEwZnc3IucHQxDzANBgNVBAMTBmdzci5wdDEcMBoGCSqG SIb3DQEJARYNc2VyZ2lvQGdzci5wdDAeFw0wNDAzMDkyMzI1NTlaFw0wNTAzMDky MzI1NTlaMIGEMQswCQYDVQQGEwJQVDERMA8GA1UECBMIQnJhZ2FuY2ExETAPBgNV BAcTCEJyYWdhbmNhMQ8wDQYDVQQKEwZnc3IucHQxDzANBgNVBAsTBmdzci5wdDEP MA0GA1UEAxMGZ3NyLnB0MRwwGgYJKoZIhvcNAQkBFg1zZXJnaW9AZ3NyLnB0MIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3GYl4F6WJdGX+VyM7U+BJgbsScWso kAlzH3+I1Qoe8ccTeuBI9/8akr81MW3frZUJHRIOWY+4te9Dkubg8s3bhbxw1tX3 oxL1UiAqVUAQH/e9XO/X2zP5TvXHb6UHFcB0spj/E9dvGRbF+dlHtZEiW/H+Be5b rwAYk0fi/wR+GwIDAQABo4IBEDCCAQwwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0E HxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFG1bhoVn gkCBGgAXE2pVh8YPrgsvMIGxBgNVHSMEgakwgaaAFP12e/rrmANtjNavL2XdCmK7 eWZYoYGKpIGHMIGEMQswCQYDVQQGEwJQVDERMA8GA1UECBMIQnJhZ2FuY2ExETAP BgNVBAcTCEJyYWdhbmNhMQ8wDQYDVQQKEwZnc3IucHQxDzANBgNVBAsTBmdzci5w dDEPMA0GA1UEAxMGZ3NyLnB0MRwwGgYJKoZIhvcNAQkBFg1zZXJnaW9AZ3NyLnB0 ggEAMA0GCSqGSIb3DQEBBAUAA4IBAQAFSbEReZe5DiPBH2XBjVENtAa4OaF0b+HO W0VWt2wJ8XzsJGIDjor2bEqIINkzlf4iKpK1yz9ul3RFSmgmgGLTSxfPQZboR0F3 JmczjnLzhxChwSGJHFUmq9TGJqCa9+/mTmInR58WD6INRa7RggouwK7TBefyOqKf hK/ZTyHC+KMT2ytiU0t/A4nv7K99bAQF+JvIZ0wQHQkVOmvSBoOIaebr8/4Diuum SIv48H6rBTEkFYbQaYTz7NqXWHQ2P0e6GouaYfWdFtxuHCD1ZfchjTlMKV1O77Df B9PjlSSUZ3jVV78mFGBERcJ0agDW99OkUvtpHKc4c3s1Tf4CQ4Jl -----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: Los mismos comandos, 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/). 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.