![Error 500 al intentar enviar a GitLab con autenticación de Active Directory](https://rvso.com/image/1604277/Error%20500%20al%20intentar%20enviar%20a%20GitLab%20con%20autenticaci%C3%B3n%20de%20Active%20Directory.png)
Actualmente utilizamos SubVersion, pero estamos buscando migrar a una solución basada en Git para poder realizar revisiones de código previas a la confirmación. Los requisitos son que el repositorio central de Git esté alojado localmente, tenga una interfaz visual para permitir la gestión de proyectos y utilice autenticación de Active Directory.
Como prueba, instalé GitLab EE en una máquina virtual que ejecuta el servidor Ubuntu 18.04. Configuré la autenticación AD usando la siguiente configuración:
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
Esto ha sido parcialmente exitoso. Aparece una pestaña MiOrganización en la página de inicio de sesión de GitLab y los miembros del grupo de Software pueden iniciar sesión utilizando su inicio de sesión y contraseña de AD, mientras que los que no son miembros no. A los miembros del grupo "Departamento de software interno" no se les asignan automáticamente derechos de administrador, pero está bien porque podemos agregarlos manualmente.
El problema surge al intentar enviar el historial de un repositorio SVN a GitLab o clonar un repositorio. Creé un grupo de software interno en GitLab y le agregué un proyecto TestProject con un archivo readme.txt. En mi PC con Windows 10 instalé Git Credential Manager para Windows. Cuando intento clonar esto en mi PC usando: git clonehttp://gitlab/internal-software/testproject.git Recibo un mensaje de:
fatal: no se puede acceder 'http://gitlab/internal-software/testproject.git/': La URL solicitada devolvió el error: 500 WireShark muestra dos intentos de conexión con un 401: respuesta no autorizada al primero, seguido de un 500: respuesta de error interno del servidor al segundo:
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
El contenido de la respuesta 500 – Error interno del servidor es la página estándar GitLab 500 – “Vaya, algo salió mal por nuestra parte”.
En el servidor, revisé los archivos .log en var/logs/gitlab/gitlab-rails y encontré esto en Production_json.log:
{"method":"GET","path":"/internal-software/testproject/git/info/refs","format":"/","controller":"Proyectos::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" :"software-interno"},{"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","formato":"/","controller":"Projects::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError: SE DEBE proporcionar cifrado o método","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":"software-interno"},{"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"}
Estos parecerían coincidir con las solicitudes y respuestas HTTP anteriores. El primero es el 401 y el segundo es el 500.
El mensaje de error es ArgumentError: SE DEBE proporcionar cifrado o método. Intenté buscar esto en el sitio de GitLab, Stack Overflow, Stack Exchange y algunos motores de búsqueda conocidos, pero solo obtuve resultados aproximados que no coinciden con mi problema.
Respuesta1
La respuesta, proporcionada por el soporte de GitLab, fue que me faltaban las siguientes configuraciones en la configuración:
encryption: 'plain'
verify_certificates: true
Con esto en su lugar, pude clonar y empujar. Lo que sí noté fue que a cualquier otra persona que se conectara se le dijo que su cuenta estaba bloqueada hasta que yo la desbloqueé usando una cuenta de administrador.