GitLab LDAP身份验证问题(SSL_connect,用户身份验证)

时间:2018-04-09 21:45:40

标签: ubuntu openssl ldap google-cloud-platform gitlab

我一直无法通过GitLab服务器验证LDAP登录。两台服务器都在Ubuntu 16.04上,在Google Cloud上进行了相当新的设置。

这就是我的gitlab.rb文件的ldap部分:

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: ''

最初,我有encryption: 'plain'哪种工作。当我使用命令sudo gitlab-rake gitlab:ldap:check而加密设置为plain时,我实际上得到了一个可以访问服务器的用户列表:

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

这让我觉得一切都已经开始了,但是当我尝试使用这三个用户之一登录时,它无法正确验证。在gitlab页面上显示的错误是“Falied to authenticate user:username of wrong username”,尽管是正确的。 (除非我在这里不正确:我一直在使用uid登录)

这让我觉得它与加密有关,因为用户清楚地显示在上面并且正在建立连接。所以我尝试更改encryption: simple_tls,因为似乎大多数使用LDAP的GitLab教程都使用了相同的设置。当我尝试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>'

我已经阅读过,看起来这个错误可能是由于某种版本与OpenSSL不匹配造成的,但所有建议的解决方案还没有成功。

所以我很好奇是否有人可以帮助我解决这些问题(更容易):更改我的LDAP服务器以使用简单的身份验证,或修复gitlab / ldap服务器以使用simple_tls。

2 个答案:

答案 0 :(得分:3)

以某种方式修复它。我将加密切换回(end-1),因为我觉得我越来越接近(因为至少for(int e = start;e < end; e++) 返回了正确的用户名)。我所做的就是让用户在我的LDAP中存储他们的密码&#34; clear&#34;而不是&#34; md5,&#34;并在两台服务器上运行encryption:'plain'。密码存储在md5中的任何LDAP用户都不起作用。

我知道这是一个不安全的解决方案,所以我仍然有兴趣听取其他有关使用gitlab-rake gitlab:ldap:check给可能遇到这个帖子的人的想法。

答案 1 :(得分:2)

使用method:'tls'时,我遇到了相同的加密问题,但又遇到另一个错误。如果使用method:'plain',我没问题,但是我需要加密。

当我使用encryption: 'simple_tls'尝试配置port: 389时,遇到的错误与您相同。

然后我意识到state=SSLv2/v3 read server hello A实际上意味着客户端(gitlab)尝试连接,但是其SSL连接请求(SSL-hello)没有成功。 我得出结论,gitlab必须立即尝试建立SSL连接,而不是实际协商使用的加密协议。

然后我尝试使用LDAPS端口636,sudo gitlab-rake gitlab:ldap:check立即起作用。

此外,simple_tls corresponds to using a regular TLS-tunnel immediately, while tls corresponds to StartTLS


TL; DR:

gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main:
   label: 'LDAP'
   host: '<internal IP of domain controller>'
   port: 636
   uid: 'uid'
   encryption: 'simple_tls'
   bind_dn: 'CN=admin,DC=<project_name>,DC=local'
   password: '<password>'
   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'

我没有使用verify_certificates: false