5 SSL
Afin de sécuriser les échanges d'informations avec les différents serveurs LDAP,
on peut utiliser SSL (Secure Sockets Layer), qui est en fait
une couche se rajoutant dans les paquets transmis, et permettant de crypter
les données transmises.
J'ai tenté d'utiliser SSL avec OpenLDAP et Active Directory .
5.1 SSL avec OpenLDAP
Pour pouvoir utiliser SSL avec OpenLDAP , il faut l'avoir compilé avec le
support SSL/TLS (TLS : Transport Layer Security).
Il faut avoir au préalable installé OpenSSL .
(On peut aussi installer un package rpm, mais au moment de la rédaction de ce
document, la dernière version que j'ai trouvée est OpenLDAP 2.1.25
(pas en paquet officiel, mais sur http://www.int-evry.fr/mci/user/procacci/SRPMS/9/ ).
Cette version possède le support SSL, on peut donc l'utiliser)
Pour compiler OpenLDAP avec le support SSL/TLS, j'ai dû taper les commandes
suivantes depuis le répertoire des sources :
$ export CPPFLAGS='-I/usr/local/BerkeleyDB.4.2/include -I/usr/kerberos/include'
# configure ne trouvant pas les headers kerberos, il a fallu lui indiquer
# où ils se trouvent
$ export LDFLAGS='-L/usr/local/BerkeleyDB.4.2/lib'
$ ./configure --with-tls=yes --with-cyrus-sasl=no
# l'utilisation de tls et de cyrus sasl est choisie automatiquement par défaut,
# ici on force l'utilisation de tls, et on interdit celle de cyrus sasl
# (en effet, il y a déjà une version trop ancienne de cyrus sasl installée,
# que je ne peux pas supprimer car c'est une dépendance de sendmail, mutt
# et squid, et en compilant la dernière version, j'ai un problème de conflit de
# versions que je n'ai pas réussi à résoudre)
$ make depend
$ make
$ make test
$ su -c "make install"
Pour pouvoir utiliser SSL, il faut créer un certificat,
reconfigurer le serveur, et le relancer en lui indiquant d'utiliser ssl.
5.1.1 Création d'un certificat
(cf http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html (en anglais))
On peut assez aisément créer un certificat à l'aide d'OpenSSL .
En fait, on a besoin de :
-
une Autorité de Certification (CA)
- un certificat du serveur
- une clé privée du serveur
Pour les obtenir, on procède ainsi :
-
on crée un répertoire temporaire : mkdir tmpssl
- on se place dans ce répertoire : cd tmpssl
- on copie le script de création de certificats :
cp /usr/share/ssl/misc/CA .
- on modifie ce script : vers la ligne 56, on a ceci :
-newreq)
# create a certificate request
$REQ -new -keyout newreq.pem -out newreq.pem $DAYS
RET=$?
echo "Request (and private key) is in newreq.pem"
;;
Il suffit de rajouter -nodes à la fin de la troisième ligne,
de sorte à avoir
$REQ -new -keyout newreq.pem -out newreq.pem $DAYS -nodes.
Cette modification permet de ne pas avoir à taper le mot de passe
du certificat au lancement du serveur.
- on crée une CA :
$ ./CA -newca
CA certificate filename (or enter to create) <enter>
Making CA certificate ...
Generating a 1024 bit RSA private key
..++++++
....................++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase: <pass phrase>
Verifying - Enter PEM pass phrase: <même pass phrase>
-----
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) [GB]:FR
State or Province Name (full name) [Berkshire]:77
Locality Name (eg, city) [Newbury]:Melun
Organization Name (eg, company) [My Company Ltd]:CG77
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:
ceci crée demoCA/cacert.pem (l'autorité de certification)
ainsi que demoCA/private/cakey.pem (sa clé privée)
- on crée une "requête de signature de certificat" pour le serveur
(Certificate Signing Request - CSR) :
$ ./CA -newreq
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) [GB]:FR
State or Province Name (full name) [Berkshire]:77
Locality Name (eg, city) [Newbury]:Melun
Organization Name (eg, company) [My Company Ltd]:CG77
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request (and private key) is in newreq.pem
ceci génère le fichier newreq.pem
- on demande à l'autorité de certification de signer la CSR :
$ ./CA -sign
Using configuration from /usr/share/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: <pass phrase>
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Feb 27 14:00:30 2004 GMT
Not After : Feb 26 14:00:30 2005 GMT
Subject:
countryName = FR
stateOrProvinceName = 77
localityName = Melun
organizationName = CG77
commonName = example.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
21:F6:97:CE:0E:9C:7B:57:F3:AE:9E:2D:34:91:CB:B5:53:16:A3:FE
X509v3 Authority Key Identifier:
keyid:AE:C0:53:F4:6B:D0:ED:F6:FF:00:6F:AF:FD:B8:2E:BF:E7:27:56:A2
DirName:/C=FR/ST=77/L=Melun/O=CG77/CN=example.com
serial:00
Certificate is to be certified until Feb 26 14:00:30 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=FR, ST=77, L=Melun, O=CG77, CN=example.com
Validity
Not Before: Feb 27 14:00:30 2004 GMT
Not After : Feb 26 14:00:30 2005 GMT
Subject: C=FR, ST=77, L=Melun, O=CG77, CN=example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:d8:84:5a:24:34:82:7b:63:04:f1:8a:2d:ba:ad:
38:5e:00:50:68:c3:e3:9f:15:e0:7c:4f:b5:13:aa:
88:7d:fa:7d:f3:c4:fe:14:ad:e5:f6:70:e5:da:8e:
7e:e9:97:0c:fb:e1:f6:cf:68:31:53:bb:57:04:41:
7e:05:0e:18:1c:5e:55:d3:62:e0:8e:cd:82:b3:92:
56:14:b5:22:50:ad:17:df:3d:ab:df:55:24:8c:43:
fc:e4:f5:db:9f:64:8b:c3:aa:3e:3f:14:16:ea:f7:
8e:8e:e4:51:4a:96:46:b0:6b:2c:7e:8b:b4:b8:47:
8e:d0:31:60:53:a5:3b:e3:5d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
21:F6:97:CE:0E:9C:7B:57:F3:AE:9E:2D:34:91:CB:B5:53:16:A3:FE
X509v3 Authority Key Identifier:
keyid:AE:C0:53:F4:6B:D0:ED:F6:FF:00:6F:AF:FD:B8:2E:BF:E7:27:56:A2
DirName:/C=FR/ST=77/L=Melun/O=CG77/CN=example.com
serial:00
Signature Algorithm: md5WithRSAEncryption
30:df:d5:f9:a0:32:6e:8c:3d:e2:58:95:f7:8f:9a:cb:d6:36:
42:01:43:43:96:f1:ba:88:84:06:ce:61:8d:ac:06:14:72:8d:
0e:d2:68:7b:60:1c:9f:6d:fb:32:24:2d:93:ab:ba:4c:21:9f:
6f:67:b6:62:5b:35:a9:a5:1e:fe:93:97:2b:43:00:34:09:bd:
9a:a6:04:0f:21:20:fb:77:70:a9:76:05:e4:fd:de:9d:69:09:
82:eb:a1:84:57:92:fb:27:0a:22:7c:91:d3:55:7c:f7:d1:92:
cc:5f:df:b0:dd:8a:18:5f:94:ce:36:14:f4:fc:c3:5a:66:85:
b1:59
-----BEGIN CERTIFICATE-----
MIIC6TCCAlKgAwIBAgIBATANBgkqhkiG9w0BAQQFADBPMQswCQYDVQQGEwJGUjEL
MAkGA1UECBMCNzcxDjAMBgNVBAcTBU1lbHVuMQ0wCwYDVQQKEwRDRzc3MRQwEgYD
VQQDEwtleGFtcGxlLmNvbTAeFw0wNDAyMjcxNDAwMzBaFw0wNTAyMjYxNDAwMzBa
ME8xCzAJBgNVBAYTAkZSMQswCQYDVQQIEwI3NzEOMAwGA1UEBxMFTWVsdW4xDTAL
BgNVBAoTBENHNzcxFDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEB
AQUAA4GNADCBiQKBgQDYhFokNIJ7YwTxii26rTheAFBow+OfFeB8T7UTqoh9+n3z
xP4UreX2cOXajn7plwz74fbPaDFTu1cEQX4FDhgcXlXTYuCOzYKzklYUtSJQrRff
PavfVSSMQ/zk9dufZIvDqj4/FBbq946O5FFKlkawayx+i7S4R47QMWBTpTvjXQID
AQABo4HUMIHRMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2Vu
ZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBQh9pfODpx7V/Ouni00kcu1Uxaj
/jB3BgNVHSMEcDBugBSuwFP0a9Dt9v8Ab6/9uC6/5ydWoqFTpFEwTzELMAkGA1UE
BhMCRlIxCzAJBgNVBAgTAjc3MQ4wDAYDVQQHEwVNZWx1bjENMAsGA1UEChMEQ0c3
NzEUMBIGA1UEAxMLZXhhbXBsZS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAMN/V
+aAybow94liV94+ay9Y2QgFDQ5bxuoiEBs5hjawGFHKNDtJoe2Acn237MiQtk6u6
TCGfb2e2Yls1qaUe/pOXK0MANAm9mqYEDyEg+3dwqXYF5P3enWkJguuhhFeS+ycK
InyR01V899GSzF/fsN2KGF+UzjYU9PzDWmaFsVk=
-----END CERTIFICATE-----
Signed certificate is in newcert.pem
ceci génère le fichier newcert.pem (le certificat du serveur
signé par la CA), avec la clé privée dans newreq.pem
Maintenant qu'on a les certificats nécessaires, on peut passer à la
configuration du serveur OpenLDAP .
5.1.2 Configuration
On commence par copier les fichiers que l'on vient de générer à un endroit
accessible par OpenLDAP , par exemple /usr/local/etc/openldap :
$ su
Password: <pass root>
# cp ./demoCA/cacert.pem /usr/local/etc/openldap/
# cp ./newcert.pem /usr/local/etc/openldap/ldap_crt.pem
# cp ./newreq.pem /usr/local/etc/openldap/ldap_key.pem
Puis on modifie le fichier slapd.conf, en ajoutant à la fin les lignes
suivantes :
TLSCertificateFile /usr/local/etc/openldap/ldap_crt.pem
TLSCertificateKeyFile /usr/local/etc/openldap/ldap_key.pem
TLSCACertificateFile /usr/local/etc/openldap/cacert.pem
Ca y est, le serveur OpenLDAP est correctement configuré pour gérer le SSL!
On configure aussi les clients afin de ne pas avoir à demander de
certificat client (dans le cas contraire il faudrait créer des certificats
pour les clients). Pour cela on rajoute dans ldap.conf la ligne :
TLS_REQCERT never
5.1.3 Utilisation
Si un serveur OpenLDAP tournait déjà en tâche de fond, on l'arrête proprement
avec la commande :
kill -2 `cat /usr/local/var/run/slapd.pid`
(faire attention aux backquotes (`) (AltGr-7) qui ne sont pas
des quotes (') ...)
Pour lancer le serveur OpenLDAP avec accès au port sécurisé uniquement,
on tape la commande :
/usr/local/libexec/slapd -h "ldaps:///"
Pour le lancer avec à la fois accès au port sécurisé et au port classique, on
tape :
/usr/local/libexec/slapd -h "ldap:/// ldaps:///"
On peut alors tester que tout fonctionne bien avec :
ldapsearch -b dc=example,dc=com -H ldaps://localhost
Dorénavant, lorsqu'on s'authentifie auprès du serveur LDAP (si on utilise bien
le port ldaps), le mot de passe ne circule plus en clair sur le réseau,
et on ne peut plus l'intercepter à l'aide d'un sniffer...
5.2 SSL avec Active Directory
Pour utiliser le SSL avec Active Directory , il faut aussi créer un certificat.
On procède ainsi :
-
on crée l'autorité de certification, et un certificat signé par cette
autorité (attention, il faut bien mettre en CN le nom complet du
contrôleur de domaine (par ex act2000.demo-cg77.org)) :
$ /usr/share/ssl/misc/CA -newca
$ /usr/share/ssl/misc/CA -newreq
$ /usr/share/ssl/misc/CA -sign
- on convertit ces certificats au format PKCS#12, en incorporant la clé
privée :
$ openssl pkcs12 -export -in demoCA/cacert.pem
-out newserverca.pfx
-inkey demoCA/private/cakey.pem
-name "demo-cg77 CA"
$ openssl pkcs12 -export -in newcert.pem
-out newservercrt.pfx
-inkey newreq.pem
-name "demo-cg77 Certificate"
- on transfère les 2 fichiers .pfx nouvellement créés sur la
machine serveur Active Directory
- on importe le CA dans "Autorités de certification racines de confiance"
de l'"ordinateur local", puis on importe le certificat dans "Personnel"
de l'"ordinateur local". Ceci peut se faire en double-cliquant sur
les fichiers .pfx ou à l'aide du composant logiciel enfichable
"Certificats de l'ordinateur local" de mmc.
- et c'est tout : normalement le certificat sera trouvé automatiquement,
et le port 636 qui était inutilement ouvert en permanence depuis l'installation
de Windows va enfin pouvoir servir à quelque chose...
Remarque
Apparemment, dans Windows 2000 Server (pas vérifié dans le 2003),
s'il y a plusieurs certificats valides dans le magasin de l'ordinateur local,ce sera toujours le 1er trouvé qui sera sélectionné, donc pas forcément
le bon, alors qu'avec OpenLDAP on indique tout simplement quel certificat
on veut utiliser...
On peut maintenant tester la connexion SSL :
$ openssl s_client -connect 101.0.50.41:636 -showcerts -state -CAfile demoCA/cacert.pem
(on remplace bien sûr l'ip après "-connect" par l'adresse du serveur
Active Directory ...)
Si tout se passe bien, on devrait avoir un certain nombre d'informations
qui devraient s'afficher, comme sur l'exemple suivant :
$ openssl s_client -connect 101.0.50.41:636 -showcerts -state -CAfile demoCA/cacert.pem
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=1 /C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
verify return:1
depth=0 /C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
---
Certificate chain
0 s:/C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
i:/C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
-----BEGIN CERTIFICATE-----
MIIDCDCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQQFADBZMQswCQYDVQQGEwJGUjEL
MAkGA1UECBMCNzcxDjAMBgNVBAcTBU1lbHVuMQ0wCwYDVQQKEwRDRzc3MR4wHAYD
VQQDExVhY3QyMDAwLmRlbW8tY2c3Ny5vcmcwHhcNMDQwMjI2MTQxNzI0WhcNMDUw
MjI1MTQxNzI0WjBZMQswCQYDVQQGEwJGUjELMAkGA1UECBMCNzcxDjAMBgNVBAcT
BU1lbHVuMQ0wCwYDVQQKEwRDRzc3MR4wHAYDVQQDExVhY3QyMDAwLmRlbW8tY2c3
Ny5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK78N9OZ58meYVWABeKN
E4gNT8Nl7t1FftOpp4qWQm63XVoMhOvioPJfrXwpjIeVlHHluFX3bmd7+QcrgLhe
gxEuffBv+FTS1VSqWr3EZArpk5d70l5ueUjLJGihG9gAZw/e23QJQcyT5kDr8aaZ
ZzdzPUd+97URBKKIXBDuhcUtAgMBAAGjgd8wgdwwCQYDVR0TBAIwADAsBglghkgB
hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE
FLHG6t5N4zDcaUlo1fmUYOuHbEarMIGBBgNVHSMEejB4gBTAAn0nbntcY51kBaAg
oDpdptYzUqFdpFswWTELMAkGA1UEBhMCRlIxCzAJBgNVBAgTAjc3MQ4wDAYDVQQH
EwVNZWx1bjENMAsGA1UEChMEQ0c3NzEeMBwGA1UEAxMVYWN0MjAwMC5kZW1vLWNn
Nzcub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBAAOdM1OPLCEVpGLJjz8czhPVg42y
QNUiQYvTmSmG8868GjvKl2iPBmSp9ZEVNv2xVyUHb6E0VTwwWih1cujYLbWw9ixM
MhgENCSyrVHT59Y7m0P7vH1FRZMhfko04FiVHP7HWtDGL3B9wxK/M4SIPyRzE0Cr
i83N1Dd5i1Ecew9a
-----END CERTIFICATE-----
---
Server certificate
subject=/C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
issuer=/C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
---
Acceptable client certificate CA names
/C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority - G2/OU=(c) 1998 VeriSign, Inc. - For authorized use only/OU=VeriSign Trust Network
/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority - G2/OU=(c) 1998 VeriSign, Inc. - For authorized use only/OU=VeriSign Trust Network
/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting/OU=Certification Services
Division/CN=Thawte Personal Freemail CA/emailAddress=personal-freemail@thawte.com
/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting/OU=Certification Services
Division/CN=Thawte Personal Premium CA/emailAddress=personal-premium@thawte.com
/C=US/O=First Data Digital Certificates Inc./CN=First Data Digital Certificates
Inc. Certification Authority
/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting/OU=Certification Services
Division/CN=Thawte Personal Basic CA/emailAddress=personal-basic@thawte.com
/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
/C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority
/C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority
/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority - G2/OU=(c) 1998 VeriSign, Inc. - For authorized use only/OU=VeriSign Trust Network
/C=HU/L=Budapest/O=NetLock Halozatbiztonsagi Kft./OU=Tanusitvanykiadok/CN=NetLock Uzleti (Class B) Tanusitvanykiado
/C=US/O=GTE Corporation/CN=GTE CyberTrust Root
/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root
/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority
/C=HU/ST=Hungary/L=Budapest/O=NetLock Halozatbiztonsagi Kft./OU=Tanusitvanykiadok/CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado
/C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/OU=(c) 1998 VeriSign, Inc. - For authorized use only/OU=VeriSign Trust Network
/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Root/C=HU/L=Budapest/O=NetLock Halozatbiztonsagi Kft./OU=Tanusitvanykiadok/CN=NetLock Expressz (Class C) Tanusitvanykiado
/OU=Copyright (c) 1997 Microsoft Corp./OU=Microsoft Corporation/CN=Microsoft Root Authority
/DC=com/DC=microsoft/CN=Microsoft Root Certificate Authority
/C=FR/ST=77/L=Melun/O=CG77/CN=act2000.demo-cg77.org
---
SSL handshake has read 4098 bytes and written 336 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: DB17000043304AC576E0586E82B6139839D1D812DA0C3C707CD1CABF390A1965 Session-ID-ctx:
Master-Key: 149A4A63893D34003E4D5AC2C9223040D68CAA2714AE7709193C64E7C2BE4B49AB7EA0B619DD8146F147FD0EE76DE1C3
Key-Arg : None
Krb5 Principal: None
Start Time: 1077894853
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
(le programme ne rend pas la main, il faut l'interrompre par Ctrl-c)
Si par contre il y a un problème, le programme rendra la main après avoir
affiché la cause de l'erreur, et il faudra essayer de comprendre pourquoi
ça ne marche pas...
Une fois que tout ceci fonctionne, on peut enfin accéder à Active Directory au moyen d'une connexion LDAP sécurisée par SSL/TLS, ce qui permet entre
autres de changer le mot de passe d'un utilisateur (voir 4.4.1).
5.3 SSL avec Squid
Maintenant que les annuaires fonctionnent correctement avec SSL, on peut passer
à la configuration de Squid .
A priori, la seule chose à faire pour que Squid utilise SSL pour communiquer
avec les serveurs LDAP est de rajouter ldaps:// en tête de l'adresse du
serveur dans les appels de squid_ldap_auth et squid_ldap_group .
Cependant, il y avait un bug dans le code source de ces 2 helpers
(le bug #887 de Squid , cf http://www.squid-cache.org/bugs/show_bug.cgi?id=887 ), qui empêchait d'utiliser
correctement SSL/TLS, mais ce bug a été corrigé le 05/01/2004.
Il faut donc patcher les sources de la version utilisée de Squid ,
ou récupérer la dernière version de Squid (la version 2.5STABLE5 est sortie le 01/03/2004),
et la recompiler avec support SSL
(paramètre --enable-ssl de configure).
Si on veut utiliser cette dernière version de Squid , il faut la compiler
avec toutes les options adaptées, par exemple :
$ ./configure --prefix=/usr/local/squid
--enable-default-err-language=French
--enable-err-languages="English French"
--enable-basic-auth-helpers="LDAP NCSA"
--enable-external-acl-helpers="ldap_group"
--enable-ssl
$ make
$ su -c "make install"
Par contre, on peut ne récupérer que les dernières versions de squid_ldap_auth et squid_ldap_group , dans ce cas on ne fait pas de make install,
mais après le make on récupère les fichiers
helpers/basic_auth/LDAP/squid_ldap_auth et
helpers/external_acl/ldap_group/squid_ldap_group,
et on les place par exemple à l'endroit où se trouvaient les vieilles
versions de ces fichiers (qu'on aura sauvegardés avant au cas où).
Remarque
Lors de la compilation de Squid , en fait lors de la compilation de
squid_ldap_auth et squid_ldap_group , j'ai été confronté à une erreur,
et il a fallu que je rajoute -L/usr/local/lib
à la ligne LDADD=... des Makefile correspondants.
Ensuite, il suffit effectivement de modifier les 2 lignes de squid.conf
qui appellent squid_ldap_auth et squid_ldap_group , afin d'indiquer le nouveau
chemin de ces 2 programmes si celui-ci a changé, et de rajouter ldaps://
en tête de l'adresse du serveur LDAP.
Il ne reste plus qu'à relancer le serveur Squid , et maintenant
l'authentification par groupes s'effectue de manière cryptée par SSL/TLS.
(On peut le vérifier avec Ethereal : aucun mot de passe ne circule plus en
clair)