Erro 500 ao tentar enviar para o GitLab com autenticação do Active Directory

Erro 500 ao tentar enviar para o GitLab com autenticação do Active Directory

Atualmente usamos SubVersion, mas estamos pensando em migrar para uma solução baseada em Git para poder realizar revisões de código pré-confirmação. Os requisitos são que o repositório Git central seja hospedado no local, tenha um front-end visual para permitir o gerenciamento de projetos e use autenticação do Active Directory.

Como teste, instalei o GitLab EE em uma máquina virtual executando o servidor Ubuntu 18.04. Configurei a autenticação AD usando a seguinte configuração:

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

Isto foi parcialmente bem-sucedido. Uma guia MyOrganisation aparece na página de logon do GitLab e os membros do grupo Software podem fazer logon usando seu logon e senha do AD, enquanto os não-membros não. Os membros do grupo “Departamento de Software Interno” não recebem direitos de administrador automaticamente, mas tudo bem porque podemos adicioná-los manualmente.

O problema surge ao tentar enviar o histórico de um repositório SVN para o GitLab ou clonar um repositório. Criei um grupo de software interno no GitLab e adicionei um projeto TestProject a ele com um arquivo readme.txt. No meu PC com Windows 10, instalei o Git Credential Manager para Windows. Quando tento clonar isso para o meu PC usando: git clonehttp://gitlab/internal-software/testproject.git Recebo uma mensagem de:

fatal: incapaz de acessar 'http://gitlab/internal-software/testproject.git/': O URL solicitado retornou o erro: 500 WireShark mostra duas tentativas de conexão com uma resposta 401 – Não autorizado para a primeira, seguida por uma resposta 500 – Erro interno do servidor para a segunda:

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

O conteúdo da resposta 500 – Internal Server Error é a página padrão do GitLab 500 – “Opa, algo deu errado do nosso lado”.

No servidor, examinei os arquivos .log em var/logs/gitlab/gitlab-rails e encontrei isto em production_json.log:

{"method":"GET","path":"/internal-software/testproject/git/info/refs","format":"/","controller":"Projetos::GitHttpController","action":"info_refs","status":401,"duration":35.81,"view":1.05,"db":9.7,"time":" 19/09/2019T08:37:55.371Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","valor" :"software interno"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"nome de usuário":null ,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"} {"method":"GET","path":"/internal-software/testproject /git/info/refs","formato":"/","controller":"Projects::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError: criptografia ou método DEVE ser fornecido","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"}

Estas parecem corresponder às solicitações e respostas HTTP acima. O primeiro é o 401 e o segundo é o 500.

A mensagem de erro é ArgumentError: criptografia ou método DEVE ser fornecido. Tentei pesquisar isso no site GitLab, Stack Overflow, Stack Exchange e alguns mecanismos de pesquisa conhecidos, mas obtive apenas resultados aproximados que não correspondem ao meu problema.

Responder1

A resposta, conforme fornecida pelo suporte do GitLab, foi que estavam faltando as seguintes configurações na configuração:

  encryption: 'plain'
  verify_certificates: true

Com isso instalado, consegui clonar e enviar. O que notei foi que qualquer outra pessoa que se conectasse foi informada de que sua conta estava bloqueada até que eu a desbloqueasse usando uma conta de administrador.

informação relacionada