====== SOGo ====== [[http://sogo.nu|SOGo]] supporte l'authentification CAS, il est donc possible de s'authentifier dessus à travers LemonLDAP::NG. ===== Activer le serveur CAS sur LemonLDAP::NG ===== La première chose à faire est d'activer le service CAS depuis l'interface de gestion de LemonLDAP::NG (issuerDBCASActivation) ===== CASifier votre serveur IMAP ===== Cette partie dépend du serveur IMAP que vous utilisez. Pour dovecot par exemple, il faut s'assurer d'utiliser le driver pam passdb { driver = pam } Il faut ensuite avoir installé pam_cas (vous pouvez trouver une version pour [[http://repo.firewall-services.com/centos/5/|EL5]] et une pour [[http://repo.firewall-services.com/centos/6/|EL6]] dans notre dépôt de RPMS). La configuration de pam_cas est assez simple, et se passe dans /etc/pam_cas.conf Exemple: host auth.domain.tld uriValidate /cas/proxyValidate trusted_ca /etc/pki/tls/certs/cacert.pem Vous pouvez tester que pam_cas peut valider le certificat de votre serveur CAS avec la commande **castest**. Si tout est OK, vous devriez obtenir un message comme ceci: configFile = /etc/pam_cas.conf --------------------------------------------------------------- Parameters from test : host = auth.doain.tld port = 443 uri = /cas/proxyValidate ssl = on trusted_ca = /etc/pki/tls/certs/cacert.pem debug = localtest no proxy service = https://foo.fr ticket = PT-1-xxx --------------------------------------------------------------- We use SSL as configured We connect to host auth.domain.tld ---- request : GET /cas/proxyValidate?ticket=PT-1-xxx&service=https://foo.fr HTTP/1.1 Connection: close Host: auth.domain.tld ---- response : HTTP/1.1 200 OK Date: Sat, 21 Sep 2013 16:35:49 GMT Server: Apache Content-Length: 184 Vary: User-Agent Connection: close Content-Type: application/xml Ticket not found --------------------------------------------------------------- invalid ticket : bad CAS ticket Si vous obtenez un message d'erreur concernant la vérification du certificat, ça ne sert à rien d'aller plus loin. pam_cas doit pouvoir valider le certificat de votre serveur CAS. Il faut que le paramètre trusted_ca pointe sur la CA qui a signé le certificat utilisé par votre serveur LemonLDAP::NG Il faut ensuite indiquer à la pile pam qu'une authentification par le module cas est suffisant (/etc/pam.d/dovecot): auth sufficient pam_cas.so -simap://localhost -f/etc/pam_cas.conf auth required pam_nologin.so auth include system-auth account include system-auth session include system-auth ===== Configurer SOGo ===== La configuration de SOGo est assez simple, il suffit d'ajouter trois directives dans votre fichier (en général /etc/sogo/sogo.conf ou /var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults): SOGoAuthenticationType = cas; SOGoCASServiceURL = "https://auth.domain.tld/cas/"; SOGoCASLogoutEnabled = YES; Et redémarrez SOGo en suivant ===== Ajustement configuration apache ===== Il reste un dernier détail à régler. Il y a un bug dans la gestion des entêtes HTTP dans SOPE (utilisé par SOGo), pour contourner ce problème, on va ajouter un filtre en perl qui ajoutera l'entête Content-Length aux réponses envoyées par LemonLDAP::NG à SOGo. package Apache::FilterChangeLength; use strict; use warnings FATAL => 'all'; use Apache2::RequestRec (); use APR::Table (); use APR::Bucket (); use APR::Brigade (); use base qw(Apache2::Filter); use Apache2::Const -compile => qw(OK); use APR::Const -compile => ':common'; sub handler { my ($filter, $bb) = @_; my $ctx = $filter->ctx; my $data = exists $ctx->{data} ? $ctx->{data} : ''; $ctx->{invoked}++; my ($bdata, $seen_eos) = flatten_bb($bb); $data .= $bdata if $bdata; if ($seen_eos) { my $len = length $data; $filter->r->headers_out->set('Content-Length', $len); $filter->print($data) if $data; } else { # store context for all but the last invocation $ctx->{data} = $data; $filter->ctx($ctx); } return Apache2::Const::OK; } sub flatten_bb { my ($bb) = shift; my $seen_eos = 0; my @data; for (my $b = $bb->first; $b; $b = $bb->next($b)) { $seen_eos++, last if $b->is_eos; $b->read(my $bdata); push @data, $bdata; } return (join('', @data), $seen_eos); } 1; Placez le fichier ci-dessus dans un répertoire contenu dans @INC (par exemple /usr/lib/perl5/site_perl/Apache ou /usr/share/perl5/site_perl/Apache), puis, éditez la configuration du vhost du portail LemonLDAP::NG (dans cet exemple, auth.domain.tld) pour y ajouter une directive de ce style: BrowserMatch "SOPE/" downgrade-1.0 PerlOutputFilterHandler Apache::FilterChangeLength Et voilà, tout devrait maintenant fonctionner. Pour les autres détails, vous pouvez regarder la documentation officielle de SOGo