Desde que el usuario introduce su contraseña hasta que ésta llega al servidor para comprobar la autentificación, el paquete de datos que contiene la contraseña viaja por los cables de red atravesando concentradores (hubs), conmutadores (switches) y enrutadores (routers) hasta llegar al servidor. Durante el trayecto, cualquier persona con los conocimientos necesarios podría quedarse con una copia del paquete de datos para, posteriormente analizarlo y tratar de descubrir el nombre y la contraseña del usuario sin que éste se percatase.
Con la finalidad de dificultar que alguien trate de descubrir contraseñas analizando los datos que las contienen, existe la posibilidad de cifrar los paquetes de datos en el PC antes de enviarlos por la red, de manera que lleguen al servidor cifrados. De esta forma, aunque un usuario malintencionado capture un paquete de datos con la información del usuario y la contraseña, será muy dificil, por no decir imposible, que sea capaz de descifrarlos ya que se utiliza cifrado asimétrico
El cifrado asimétrico permite la generación de una pareja de claves comunmente denominadas clave pública y clave privada en el servidor. La pareja de claves es tal que, todo lo cifrado con una, solo se puede descifrar con la otra.
El servidor tiene guardada en un lugar seguro la clave privada. Cuando un cliente intenta autentificarse, el servidor le trasfiere la clave pública para que cifre los datos con dicha clave antes de enviarlos. El cliente utiliza la clave pública del servidor para cifrar los datos, así al llegar el paquete al servidor, éste podrá descifrarlo porque dispone de la clave privada. Si un usuario malintencionado intercepta el paquete de datos cifrado con la clave pública, no podrá hacer nada porque no dispone de la clave privada. Si el usuario malintencionado intercepta el primer paquete que envía el servidor con la clave pública, no le servirá para nada ya que no le permitirá descifrar los datos emitidos por el PC que se va autentificar.
Normalmente las consultas al servidor LDAP se realizan por el puerto 389 (protocolo ldap) pero dichas consultas se transmiten sin cifrar. Para realizar consultas seguras cifrando los datos con SSL, es necesasrio utilizar el puerto 636 (protocolo ldaps o protocolo ldap seguro). Para ello, el servidor deberá disponer de un certificado firmado por una entidad certificadora (CA) y habrá que configurar slapd para que utilice los certificados. Se deberán realizar los siguentes pasos:
// Crear nueva entidad certificadoraroot@curso:~# /usr/lib/ssl/misc/CA.pl -newca CA certificate filename (or enter to create)Pulsamos enter para crear Making CA certificate ... Generating a 1024 bit RSA private key .........................++++++ ...........................++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Ponemos contraseña Verifying - Enter PEM pass phrase: Repetimos contraseña ----- 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]:ES State or Province Name (full name) [Some-State]:España Locality Name (eg, city) []:Soria Organization Name (eg, company) [Internet Widgits Pty Ltd]:I.E.S. La Paloma Organizational Unit Name (eg, section) []:CertificadorIES Common Name (eg, YOUR name) []:I.E.S. La Paloma Email Address []:root@ieslapaloma.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Pulsamos Enter An optional company name []:Pulsamos Enter Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem:Introducimos contraseña ... ... Write out database with 1 new entries Data Base Updated
Ya tendríamos creada nuestra nueva entidad certificadora bajo la carpeta demoCA con sus certificados correspondientes.
// Crear petición de firma de certificado de servidor# openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem Generating a 1024 bit RSA private key ...............................++++++ ...............++++++ writing new private key to 'newreq.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]:ES State or Province Name (full name) [Some-State]:España Locality Name (eg, city) []:Soria Organization Name (eg, company) [Internet Widgits Pty Ltd]:I.E.S. La Paloma Organizational Unit Name (eg, section) []:Web IES La Paloma Common Name (eg, YOUR name) []:I.E.S. La Paloma Email Address []:root@ieslapaloma.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password !-[]: Pulsamos enter An optional company name []: : Pulsamos enter
Ya tendríamos creado el archivo newreq.pem que contiene la petición de firma de certificado de servidor.
// Firmar la petición de firma de certificado del servidorroot@curso:~# /usr/lib/ssl/misc/CA.sh -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Contraseña de la CA Check that the request matches the signature Signature ok Certificate Details: Serial Number: a6:07:d5:91:ad:b3:8f:74 Validity Not Before: Oct 10 18:46:12 2005 GMT Not After : Oct 10 18:46:12 2006 GMT Subject: countryName = ES stateOrProvinceName = Espa\F1a localityName = Soria organizationName = I.E.S. La Paloma organizationalUnitName = Web IES La Paloma commonName = I.E.S. La Paloma emailAddress = root@ieslapaloma.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: B1:DA:5C:4B:E8:9E:80:8B:9F:7D:51:B1:A5:E8:84:FF:6E:27:1F:E6 X509v3 Authority Key Identifier: keyid:D8:9A:35:45:0B:2F:BE:FC:CC:43:A6:0C:9F:27:08:93:33:D0:D8:AA DirName:/C=ES/ST=Espa\xF1a/L=Soria/O=I.E.S. La Paloma /OU=CertificadorIES/emailAddress=root@ieslapaloma.com serial:A6:07:D5:91:AD:B3:8F:73 Certificate is to be certified until Oct 10 18:46:12 2006 GMT (365 days) Sign the certificate? [y/n]: y // ¿Firmamos? 1 out of 1 certificate requests certified, commit? [y/n] y // ¿Proceder? Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: a6:07:d5:91:ad:b3:8f:74 Signature Algorithm: md5WithRSAEncryption Issuer: C=ES, ST=Espa\xF1a, L=Soria, O=I.E.S. La Paloma, OU=CertificadorIES/emailAddress=root@ieslapaloma.com Validity Not Before: Oct 10 18:46:12 2005 GMT Not After : Oct 10 18:46:12 2006 GMT Subject: C=ES, ST=Espa\xF1a, L=Soria, O=I.E.S. La Paloma, OU=Web IES La Paloma, CN=I.E.S. La Paloma/emailAddress=root@ieslapaloma.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bc:10:87:92:cb:c8:dd:e1:9e:6a:15:a9:09:44: 7a:f9:bb:c7:1e:2e:66:23:92:56:ec:65:36:d3:15: d6:62:56:e4:27:6a:a1:c1:36:7b:cc:c9:20:1e:9d: 8a:d8:cd:56:f1:60:d6:c7:6e:1f:6b:19:77:5f:6e: ac:ec:4d:19:c8:bf:6e:6b:12:a2:b3:3f:56:84:c0: c7:48:09:7a:52:d2:0c:6b:ca:0d:d8:37:90:48:2e: 58:16:b5:46:d8:6d:44:bf:2a:3b:07:12:51:d6:2e: 58:ed:46:0e:6f:d7:f5:f7:ce:3f:e8:93:98:62:d0: 8b:d1:9b:1f:08:58:09:30:d7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: B1:DA:5C:4B:E8:9E:80:8B:9F:7D:51:B1:A5:E8:84:FF:6E:27:1F:E6 X509v3 Authority Key Identifier: keyid:D8:9A:35:45:0B:2F:BE:FC:CC:43:A6:0C:9F:27:08:93:33:D0:D8:AA DirName:/C=ES/ST=Espa\xF1a/L=Soria/O=I.E.S. La Paloma /OU=CertificadorIES/emailAddress=root@ieslapaloma.com serial:A6:07:D5:91:AD:B3:8F:73 Signature Algorithm: md5WithRSAEncryption 87:f1:0e:39:6d:02:48:ee:c2:2b:59:d4:e2:e5:ec:23:7e:7d: f1:0d:bb:78:45:ad:04:f7:19:d0:a9:3d:3d:6b:e5:61:34:6b: bc:fa:1b:d1:28:31:9a:aa:b4:93:f6:51:cf:36:83:cb:e1:29: 9b:7d:6c:a8:06:77:b6:80:f0:30:49:08:56:e9:f7:e0:24:1e: 8e:fa:d9:d6:f2:ad:f5:f8:f0:f2:c0:d1:92:c5:c5:17:3c:4c: 06:48:f5:c6:0c:4d:4f:39:fc:fb:f5:9f:2b:29:46:5a:fe:5d: 99:68:4d:73:02:4f:59:ab:e1:e2:5c:b1:86:b1:bb:85:c9:de: fa:0b -----BEGIN CERTIFICATE----- MIIDyzCCAzSgAwIBAgIJAKYH1ZGts490MA0GCSqGSIb3DQEBBAUAMIGIMQswCQYD VQQGEwJFUzEPMA0GA1UECBQGRXNwYfFhMQ4wDAYDVQQHEwVTb3JpYTEZMBcGA1UE ChMQSS5FLlMuIExhIFBhbG9tYTEYMBYGA1UECxMPQ2VydGlmaWNhZG9ySUVTMSMw IQYJKoZIhvcNAQkBFhRyb290QGllc2xhcGFsb21hLmNvbTAeFw0wNTEwMTAxODQ2 MTJaFw0wNjEwMTAxODQ2MTJaMIGlMQswCQYDVQQGEwJFUzEPMA0GA1UECBQGRXNw YfFhMQ4wDAYDVQQHEwVTb3JpYTEZMBcGA1UEChMQSS5FLlMuIExhIFBhbG9tYTEa MBgGA1UECxMRV2ViIElFUyBMYSBQYWxvbWExGTAXBgNVBAMTEEkuRS5TLiBMYSBQ YWxvbWExIzAhBgkqhkiG9w0BCQEWFHJvb3RAaWVzbGFwYWxvbWEuY29tMIGfMA0G CSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8EIeSy8jd4Z5qFakJRHr5u8ceLmYjklbs ZTbTFdZiVuQnaqHBNnvMySAenYrYzVbxYNbHbh9rGXdfbqzsTRnIv25rEqKzP1aE wMdICXpS0gxryg3YN5BILlgWtUbYbUS/KjsHElHWLljtRg5v1/X3zj/ok5hi0IvR mx8IWAkw1wIDAQABo4IBHDCCARgwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYd T3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFLHaXEvonoCL n31RsaXohP9uJx/mMIG9BgNVHSMEgbUwgbKAFNiaNUULL778zEOmDJ8nCJMz0Niq oYGOpIGLMIGIMQswCQYDVQQGEwJFUzEPMA0GA1UECBQGRXNwYfFhMQ4wDAYDVQQH EwVTb3JpYTEZMBcGA1UEChMQSS5FLlMuIExhIFBhbG9tYTEYMBYGA1UECxMPQ2Vy dGlmaWNhZG9ySUVTMSMwIQYJKoZIhvcNAQkBFhRyb290QGllc2xhcGFsb21hLmNv bYIJAKYH1ZGts49zMA0GCSqGSIb3DQEBBAUAA4GBAIfxDjltAkjuwitZ1OLl7CN+ ffENu3hFrQT3GdCpPT1r5WE0a7z6G9EoMZqqtJP2Uc82g8vhKZt9bKgGd7aA8DBJ CFbp9+AkHo762dbyrfX48PLA0ZLFxRc8TAZI9cYMTU85/Pv1nyspRlr+XZloTXMC T1mr4eJcsYaxu4XJ3voL -----END CERTIFICATE----- Signed certificate is in newcert.pem
Este proceso nos habrá creado el archivo newcert.pem que contiene el certificado firmado.
// Copiar certificados a su destinoroot@curso:~# mkdir /etc/ldap/certs root@curso:~# cp demoCA/cacert.pem /etc/ldap/certs/cacert.pem root@curso:~# cp newcert.pem /etc/ldap/certs/servercrt.pem root@curso:~# cp newreq.pem /etc/ldap/certs/serverkey.pem root@curso:~# chmod 400 /etc/ldap/certs/serverkey.pem
// Configuración del servidor LDAP para que utilice ssl// Añadir en /etc/ldap/slapd.conf TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCACertificateFile /etc/ldap/certs/cacert.pem TLSCertificateFile /etc/ldap/certs/servercrt.pem TLSCertificateKeyFile /etc/ldap/certs/serverkey.pem
// Añadir en /etc/init.d/slapd# Sección: Set default values SLAPD_SERVICES="ldap:/// ldaps:///"
Aquí podríamos poner únicamente SLAPD_SERVICES="ldaps:///" con lo cual solamente se iniciaría en modo seguro. Ello requerirá que todos los servicios que utilicen LDAP consulten al servidor obligatoriamente en modo seguro. Si deseamos que el login del sistema sea seguro, habría que modificar la configuración de las librerías pam_ldap y libnss-ldap para que utilicen ssl.
// Reiniciar slapd# /etc/init.d/slapd restart
Al intentar conectar, nos aparecerá la información del certificado. Podremos aceptar el certificado para esta sesión (This session only) o para siempre (Always):
Una vez que hemos conectado, podemos apreciar en la parte inferior que la conexión se ha realizado al puerto 636: