Validation de la couche SASL

Une petite procédure pour valider le fonctionnement de la SASL (Simple Athentication and Security layer) avec le mécanisme d’authentification GSSAPI (Kerberos). Nous supposons qu’un KDC est disponible (et surtout fonctionne). Si ce n’est pas le cas, un bon howto est fourni par le projet Ubuntu. Tout d’abord, installons ce qu’il faut :

apt-get install sasl2-bin
apt-get install libsasl2-2
apt-get install libsasl2-modules-gssapi-mit

Cyrus-SASL dispose d’outils pour valider le bon fonctionnement de la SASL sur votre machine. Ce sont les outils sasl-sample-[client|server]. C’est la première étape à réussir pour utiliser la SASL avec des application externes. Pour le test, on doit disposer de deux terminaux sur la machine (un pour le client, un autre pour le serveur) sur lesquelles nous sommes authentifiés. Les manipulations sont a effectuer sur les deux terminaux. Commençons par la liste des tickets en cours de validité :

klist

Nous renvoie :

klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
 
Kerberos 4 ticket cache: /tmp/tkt0

Demandons un ticket pour l’utilisateur toto :

kinit toto

Password for toto@REALM.FR:

Listons les tickets :

klist

Devrais renvoyer :

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: toto@REALM.FR
 
Valid starting     Expires            Service principal
09/10/09 11:16:57  09/10/09 21:16:57  krbtgt/REALM.FR@REALM.FR
        renew until 09/11/09 11:13:49
 
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

Nous avons nos tickets, on peut tester la couche SASL. Sur le terminal dédié au serveur, nous allons utiliser le programme sasl-sample-server :

[root@term1]# sasl-sample-server -s host -p /usr/lib/sasl2 -m GSSAPI -d mybox.mydomain

Cette commande prend en argument un service (-s), l’emplacement des librairies des différents mécanismes supportés (-p), le mécanisme forcé (-m) et le FQDN de la machine (-d). Ici on utilise le service host (service de test), pour tester le mécanisme GSSAPI. Elle produit les résultats suivants :

Forcing use of mechanism GSSAPI
Sending list of 1 mechanism(s)
S: R1NTQVBJ
Waiting for client mechanism...

Sur la terminal dédié au client, on va lancer :

[root@term2]# sasl-sample-client -s host -p /usr/lib/sasl2 -m GSSAPI -n myhost.mydomain -u toto

Cette commande prend le nom d’utilisateur que l’on cherche à authentifier (-u). Ici il s’agit de “toto” qui est un principal de notre realm Kerberos. On doit avoir la sortie suivante :

service=host
Waiting for mechanism list from server...

Sur la sortie du serveur, on a la chaîne suivante : “S: R1NTQVBJ”. Il faut la passer au client dans la mesure où il n y a pas d’interaction réelle entre les deux programmes. Pour la passer, un simple copier coller suffit. Attention cependant, pour la valider il ne faut pas appuyer sur entrée mais faire [ctrl]+D (2 fois).Si on appuie sur entrée, cela concatène un retour charriot à la chaine non attendu par le programme. La réponse du client est :

S: R1NTQVBJrecieved 6 byte message
Forcing use of mechanism GSSAPI
Choosing best mechanism from: GSSAPI
returning OK: p10613
Using mechanism GSSAPI
Preparing initial.
Sending initial response...
C: R1NTQVBJAGCCAj8GCSqGSIb3EgECAgEAboICLjCCAiqgAwIBBaEDAgEOogcDBQAgAAAAo4IBPWGCATkwggE1oAMCAQWhERs
PVU5JVi1PUkxFQU5TLkZSoiwwKqADAgEDoSMwIRsEaG9zdBsZbWFpbHRlc3QxLnVuaXYtb3JsZWFucy5mcqOB7DCB6aADAgE
SoQMCAQOigdwEgdnWwLC9Ycz3AQxjwf/iNs9xldAuOErtfaNhCDqpq7tbV1FhzFjV+vv8HdbS9qD2eDwYvyglHSLgLJbsPZdl
wPvxllN/NuOVrJB
/8FosD1sWvt1FKIyXDwovOsIvKcFa8zibivG0HBRxEWQQULrC8Wlr1qFzvjWQMlAriZ2+uEKxWVqIGDbDk9bndAGhXmZdN
KfmqzzsBkqPEIAxAW4uTaIRNxHwonizG7MbngRZhuMBCki3L7+nAxxB6bWHhuZEvPA8VLBBa5lemkbr5+k1hRuiuxX1Q
muS3+TGpIHTMIHQoAMCARKigcgEgcU8+fSbMrZekojdtuhE+RPXgQHFRjufJpFZvI+F/csYU6cZE3hNFojp4yrTcYRptlLSTV
AcfBp50xjjoHicbm5Uzvwaq+6+aDdRomCfyiScuJ1ol+F36aNi2gdhjKuV6glWCXU1DM+HaV4DWwQBIRCIdHTwQC/czfz6
nWAz
o8x0cPkOkQwHmV
vWtBZwlaref8LGWfckQXK8QLNBVxBzwmeTuar4dZw+kA1sNjQeFUqvg5MixRAxTu1xjTdTyvlGK1PONAtnvw==
Waiting for server reply...

Copier coller de la réponse du client sur le serveur :

Sending response...
S: YIGZBgkqhkiG9xIBAgICAG+BiTCBhqADAgEFoQMCAQ+iejB4oAMCARKicQRvb+47IUZ7sugVxWME3mMwey4jj
s/cvWXv6X1bgy1ETeaL8FChCtUnIvalmjHzUR9dplYmU68sKyFkc7xKHvKIbhkRk5F7PMy10iN+pspGDrFsCClm3ub
xMArsS9EfqBOzWonMRFZVhdPPAL7bgRGY
Waiting for client reply...

On colle ça dans le client :

C:
Waiting for server reply...

La réponse est un caractère blanc que l’on colle sur le serveur :

C: got ''
Sending response...
S: BQQF/wAMAAAAAAAAG76J+wcACACTtO/4HK+L2u98azg=
Waiting for client reply...

On transmet au client :

S: BQQF/wAMAAAAAAAAG76J+wcACACTtO/4HK+L2u98azg=recieved 32 byte message
Sending response...
C: BQQE/wAMAAAAAAAAD8CVGwQACABwMTA2MTMJcB2SqMJGtwEtfAk=
Negotiation complete
Username: toto
SSF: 56
Waiting for encoded message...

Hop, on colle dans le serveur :

C: BQQE/wAMAAAAAAAAD8CVGwQACABwMTA2MTMJcB2SqMJGtwEtfAk=got ' '
Negotiation complete
Username: p10613
Realm: (NULL)
SSF: 56
sending encrypted message 'srv message 1'
S: AAAASgUEB/8AAAAAAAAAABu+ifwxS1DHVyL8o4X8J2HeKsv8SaZsa36ZCAp0znoCUh6V
Fjf0+cxdGXX6c9Xie6+3bf+QJ8/N4H0cxS25
Waiting for encrypted message...

Dernier envoi sur le client :

S: AAAASgUEB/8AAAAAAAAAABu+ifwxS1DHVyL8o4X8J2HeKsv8SaZsa36ZCAp0znoCUh6V
Fjf0+cxdGXX6c9Xie6+3bf+QJ8/N4H0cxS25recieved 78 byte message
recieved decoded message 'srv message 1'
sending encrypted message 'client message 1'
C: AAAATQUEBv8AAAAAAAAAAA/AlRxbCjz0s/JxqbqHFHFHQNlOit4+ylbVbsmcaEJ5
PDTa8F8A7NhQ9sdciXNOhDe1oGYrCiF5Y23CaZdYUEbF

On clôt le côté serveur également :

C: AAAATQUEBv8AAAAAAAAAAA/AlRxbCjz0s/JxqbqHFHFHQNlOit4+ylbVbsmca
EJ5PDTa8F8A7NhQ9sdciXNOhDe1oGYrCiF5Y23CaZdYUEbFgot ''
recieved decoded message 'client message 1'

Le petit soucis du [ctrl]+D m’a fait perdre un sacré temps. En tout cas, si vous arrivez jusque la c’est que vous avez simulé une authentification via la GSSAPI (et surtout que ça marche ;-) ).

0 Response to “Validation de la couche SASL”


  • No Comments

Leave a Reply