我一直无法通过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。
答案 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
。