ubuntuopensslldapgoogle-cloud-platformgitlab

GitLab LDAP Authentication Issues (SSL_connect, user auth)


I've been having trouble with validating LDAP logins through my GitLab server. Both servers are on Ubuntu 16.04, pretty much freshly setup on Google Cloud.

This is what the ldap section of my gitlab.rb file looks like:

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

Originally, I had encryption: 'plain' which kind of worked. When I used the command sudo gitlab-rake gitlab:ldap:check while encryption was set to plain, I actually got a list of users with access to the server:

Checking LDAP ...

Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
    DN: cn=<name1>,cn=gitlab,dc=<project_name>,dc=local  uid: <username1>
    DN: cn=<name2>,cn=gitlab,dc=<project_name>,dc=local  uid: <username2>
    DN: cn=<name3>,cn=gitlab,dc=<project_name>,dc=local  uid: <username3>

Checking LDAP ... Finished

Which made me think that everything was all set to go, yet when I try to login with one of those three users it fails to authenticate properly. The error that shows up on the gitlab page is something along the lines of "Falied to authenticate user: incorrect credentials for username" despite being correct. (Unless I'm incorrect here: I've been using uid for login)

This made me think it had something to do with the encryption since the users are clearly shown as above and the connection is being made. So I tried changing encryption: simple_tls since it seemed like most tutorials for GitLab with LDAP used that same setting. This gave me new errors when I tried 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 <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'

I've read around and it seems like this error can be cause by some sort of version mismatch with OpenSSL, but all of the solutions suggested haven't worked yet.

So I'm curious if anyone can help me with either of these problems (whichever is easier): either changing my LDAP server to work with simple authentication, or fixing the gitlab/ldap server to work with simple_tls.


Solution

  • Somehow fixed it. I switched encryption back to encryption:'plain' since I felt like I was getting closer with that (since at least gitlab-rake gitlab:ldap:check returned the proper usernames). All I did was make users in my LDAP store their password with "clear" rather than "md5," and ran update-ca-certificates on both servers. Any LDAP user with a password stored in md5 does not work.

    I know this is an insecure solution so I'm still interested in hearing other ideas for using tls_simple for people who might come across this thread.