Ошибка 500 при попытке отправить данные в GitLab с аутентификацией Active Directory

Ошибка 500 при попытке отправить данные в GitLab с аутентификацией Active Directory

В настоящее время мы используем SubVersion, но хотим перейти на решение на основе Git, чтобы иметь возможность проводить предкоммит-проверки кода. Требования таковы: центральный репозиторий Git должен размещаться локально, иметь визуальный интерфейс для управления проектами и использовать аутентификацию Active Directory.

В качестве пробы я установил GitLab EE на виртуальную машину под управлением Ubuntu Server 18.04. Я настроил аутентификацию AD, используя следующую конфигурацию:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
 main:
  label: 'MyOrganisation'
  host: '172.16.0.6'
  port: 389
  uid: 'sAMAccountName'
  bind_dn: 'CN=ldapbinduser,CN=Users,DC=myorganisation,DC=com'
  password: 'password' 
  timeout: 30
  active_directory: true
  allow_username_or_mail_login: false
  lowercase_usernames: true
  block_auto_created_users: true
  base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  group_base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  admin_group: 'internal software dept'
EOS

Это частично удалось. Вкладка MyOrganisation появляется на странице входа в GitLab, и члены группы Software могут входить в систему, используя свои имя пользователя и пароль AD, а не члены — нет. Членам группы «Internal Software Dept» автоматически не назначаются права администратора, но это нормально, поскольку мы можем добавлять их вручную.

Проблема возникает при попытке отправить историю репозитория SVN в GitLab или клонировать репозиторий. Я создал группу Internal Software в GitLab и добавил в нее проект TestProject с файлом readme.txt. На моем ПК с Windows 10 я установил Git Credential Manager для Windows. Когда я пытаюсь клонировать это на свой ПК с помощью: git clonehttp://gitlab/internal-software/testproject.git Я получаю сообщение:

фатально: невозможно получить доступ 'http://gitlab/internal-software/testproject.git/': Запрошенный URL-адрес вернул ошибку: 500 WireShark показывает две попытки подключения с ответом 401 – Несанкционированный на первую попытку, за которым следует ответ 500 – Внутренняя ошибка сервера на вторую попытку:

1   local IP    gitlab IP   TCP 66  59710 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
2   gitlab IP   local IP    TCP 66  80 → 59710 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
3   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=1 Ack=1 Win=525568 Len=0
4   local IP    gitlab IP   HTTP    241 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1
5   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=1 Ack=188 Win=30336 Len=0
6   gitlab IP   local IP    HTTP    618 HTTP/1.1 401 Unauthorized  (text/plain)
7   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=188 Ack=565 Win=524800 Len=0
8   local IP    gitlab IP   HTTP    292 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1 
9   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=0
10  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
11  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=2025 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
12  gitlab IP   local IP    HTTP    309 HTTP/1.1 500 Internal Server Error  (text/html)
13  local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=426 Ack=3740 Win=525568 Len=0
14  local IP    gitlab IP   TCP 54  59710 → 80 [RST, ACK] Seq=426 Ack=3740 Win=0 Len=0

Содержимое ответа 500 – Внутренняя ошибка сервера представляет собой стандартную страницу GitLab 500 – «Упс, что-то пошло не так на нашей стороне».

На сервере я просмотрел файлы .log в var/logs/gitlab/gitlab-rails и нашел следующее в production_json.log:

{"method":"GET","path":"/internal-software/testproject/git/info/refs","format":"/","controller":"Проекты::GitHttpController","action":"info_refs","status":401,"duration":35.81,"view":1.05,"db":9.7,"time":"2019-09-19T08:37:55.371Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"} {"method":"GET","path":"/internal-software/testproject/git/info/refs","format":"/","controller":"Projects::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError: шифрование или метод ДОЛЖНЫ быть provided","duration":215.3,"view":0.0,"db":14.11,"time":"2019-09-19T08:37:55.803Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"}

Они, по-видимому, соответствуют HTTP-запросам и ответам выше. Первый — 401, а второй — 500.

Сообщение об ошибке: ArgumentError: ДОЛЖНО быть указано шифрование или метод. Я пробовал искать это на сайте GitLab, Stack Overflow, Stack Exchange и некоторых известных поисковых системах, но получаю только приблизительные результаты, которые не соответствуют моей проблеме.

решение1

Ответ, предоставленный службой поддержки GitLab, состоял в том, что в конфигурации отсутствуют следующие настройки:

  encryption: 'plain'
  verify_certificates: true

С этими настройками я смог клонировать и отправлять. Я заметил, что всем остальным, кто подключался, сообщалось, что их учетная запись заблокирована, пока я не разблокирую их с помощью учетной записи администратора.

Связанный контент