Problèmes d’authentification LDAP GitLab (SSL_connect, authentification utilisateur)

J’ai eu des problèmes avec la validation des connexions LDAP via mon serveur GitLab. Les deux serveurs sont sur Ubuntu 16.04, à peu près fraîchement configurés sur Google Cloud.

Voici à quoi ressemble la section ldap de mon fichier gitlab.rb:

gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' main: label: 'LDAP' host: '' port: 389 uid: 'uid' bind_dn: 'CN=admin,DC=,DC=local' password: '' encryption: 'simple_tls' # "start_tls" or "simple_tls" or "plain" verify_certificatees: false active_directory: false allow_username_or_email_login: true lowercase_usernames: false block_auto_created_users: false base: 'CN=GitLab,DC=,DC=local' user_filter: '' 

À l’origine, j’avais le encryption: 'plain' quel type de travail. Lorsque j’ai utilisé la commande sudo gitlab-rake gitlab:ldap:check que le cryptage est défini sur plaine, j’ai en fait une liste d’utilisateurs ayant access au serveur:

 Checking LDAP ... Server: ldapmain LDAP authentication... Success LDAP users with access to your GitLab server (only showing the first 100 results) DN: cn=,cn=gitlab,dc=,dc=local uid:  DN: cn=,cn=gitlab,dc=,dc=local uid:  DN: cn=,cn=gitlab,dc=,dc=local uid:  Checking LDAP ... Finished 

Ce qui m’a fait penser que tout était prêt à partir, mais quand je tente de me connecter avec l’un de ces trois utilisateurs, il ne parvient pas à s’authentifier correctement. L’erreur qui apparaît sur la page gitlab est quelque chose du type “Falied pour authentifier l’utilisateur: identifiants incorrects pour le nom d’utilisateur” bien qu’il soit correct. (Sauf si je suis incorrect ici: j’ai utilisé uid pour la connexion)

Cela m’a fait penser qu’il avait quelque chose à voir avec le cryptage, car les utilisateurs sont clairement indiqués ci-dessus et la connexion est établie. J’ai donc essayé de modifier le encryption: simple_tls car il semblait que la plupart des didacticiels pour GitLab avec LDAP utilisaient le même paramètre. Cela m’a donné de nouvelles erreurs lorsque j’ai essayé sudo gitlab-rake gitlab:ldap:check

 Checking LDAP ... Server: ldapmain rake aborted! Net::LDAP::Error: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ld/adapter.rb:8:in `open' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/check.rake:355:in `block in check_ldap' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/check.rake:351:in `each' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/check.rake:351:in `check_ldap' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/check.rake:340:in `block (3 levels) in ' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `' 

J’ai lu et il semble que cette erreur puisse être causée par une incompatibilité de version avec OpenSSL, mais toutes les solutions proposées n’ont pas encore fonctionné.

Je suis donc curieux que quelqu’un puisse m’aider avec l’un ou l’autre de ces problèmes (selon ce qui est plus facile): soit changer mon serveur LDAP pour qu’il fonctionne avec une authentification simple, soit réparer le serveur gitlab / ldap pour qu’il fonctionne avec simple_tls.

D’une manière ou d’une autre, il l’a réparé. J’ai remplacé le cryptage par encryption:'plain' car je me sentais de plus en plus proche (car au moins, gitlab-rake gitlab:ldap:check renvoyé les noms d’utilisateur corrects). Tout ce que j’ai fait a été de faire en sorte que les utilisateurs de mon LDAP stockent leur mot de passe avec “clear” plutôt que “md5” et ont exécuté update-ca-certificatees sur les deux serveurs. Tout utilisateur LDAP avec un mot de passe stocké dans md5 ne fonctionne pas.

Je sais que cette solution est peu sûre et je suis toujours intéressée par d’autres idées pour utiliser tls_simple pour les personnes qui pourraient rencontrer ce sujet.

J’étais bloqué sur le même problème de chiffrement lorsque j’utilisais la method:'tls' mais j’ai eu une autre erreur. Je n’ai eu aucun problème si j’ai utilisé la method:'plain' , mais j’ai besoin du cryptage.

Lorsque j’ai essayé votre encryption: 'simple_tls' configuration encryption: 'simple_tls' , avec le port: 389 , j’ai eu la même erreur que vous.

J’ai alors réalisé que l’ state=SSLv2/v3 read server hello A signifie en fait que le client (gitlab) a essayé de se connecter, mais sa demande de connexion SSL (SSL-hello) n’a pas abouti. J’ai conclu que gitlab doit immédiatement essayer d’établir une connexion SSL au lieu de négocier le protocole de chiffrement utilisé.

J’ai ensuite essayé d’utiliser le port LDAPS 636 et sudo gitlab-rake gitlab:ldap:check immédiatement a fonctionné.

De plus, simple_tls correspond à l’utilisation immédiate d’un tunnel TLS classique, alors que tls correspond à StartTLS .


TL; DR:

 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' main: label: 'LDAP' host: '' port: 636 uid: 'uid' encryption: 'simple_tls' bind_dn: 'CN=admin,DC=,DC=local' password: '' active_directory: false allow_username_or_email_login: true lowercase_usernames: false block_auto_created_users: false base: 'CN=GitLab,DC=,DC=local' 

Je n’ai pas utilisé les verify_certificatees: false .