![500-Fehler beim Versuch, mit Active Directory-Authentifizierung auf GitLab zu pushen](https://rvso.com/image/1604277/500-Fehler%20beim%20Versuch%2C%20mit%20Active%20Directory-Authentifizierung%20auf%20GitLab%20zu%20pushen.png)
Wir verwenden derzeit SubVersion, möchten aber auf eine Git-basierte Lösung migrieren, um Codeüberprüfungen vor dem Commit durchführen zu können. Die Anforderungen sind, dass das zentrale Git-Repository vor Ort gehostet wird, über ein visuelles Front-End zur Verwaltung von Projekten verfügt und Active Directory-Authentifizierung verwendet.
Als Test habe ich GitLab EE auf einer virtuellen Maschine mit Ubuntu Server 18.04 installiert. Ich habe die AD-Authentifizierung mit der folgenden Konfiguration eingerichtet:
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
Dies war teilweise erfolgreich. Auf der GitLab-Anmeldeseite wird eine Registerkarte „Meine Organisation“ angezeigt, und Mitglieder der Softwaregruppe können sich mit ihrem AD-Anmeldenamen und -Passwort anmelden, während dies Nichtmitgliedern nicht möglich ist. Mitgliedern der Gruppe „Interne Softwareabteilung“ werden nicht automatisch Administratorrechte zugewiesen, aber das ist in Ordnung, da wir sie manuell hinzufügen können.
Das Problem tritt auf, wenn ich versuche, den Verlauf eines SVN-Repositorys in GitLab zu übertragen oder ein Repository zu klonen. Ich habe in GitLab eine interne Softwaregruppe erstellt und ihr ein TestProject-Projekt mit einer readme.txt-Datei hinzugefügt. Auf meinem Windows 10-PC habe ich den Git Credential Manager für Windows installiert. Wenn ich versuche, dies mit git clone auf meinen PC zu klonen,http://gitlab/internal-software/testproject.git Ich erhalte die folgende Nachricht:
fatal: Zugriff nicht möglich 'http://gitlab/internal-software/testproject.git/': Die angeforderte URL hat den Fehler zurückgegeben: 500 WireShark zeigt zwei Verbindungsversuche mit einer 401 – Nicht autorisierten Antwort auf den ersten, gefolgt von einer 500 – Interner Serverfehler-Antwort auf den zweiten:
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
Der Inhalt der Antwort 500 – Interner Serverfehler ist die Standardseite GitLab 500 – „Hoppla, bei uns ist etwas schiefgelaufen“.
Auf dem Server habe ich die .log-Dateien in var/logs/gitlab/gitlab-rails durchgesehen und Folgendes in production_json.log gefunden:
{"Methode":"GET","Pfad":"/interne-software/testprojekt/git/info/refs","Format":"/","controller":"Projects::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: Verschlüsselung oder Methode MUSS angegeben werden","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"}
Diese scheinen mit den oben genannten HTTP-Anfragen und -Antworten übereinzustimmen. Die erste ist die 401 und die zweite die 500.
Die Fehlermeldung ist „ArgumentError: Verschlüsselung oder Methode MUSS angegeben werden“. Ich habe versucht, auf der GitLab-Site, Stack Overflow, Stack Exchange und einigen bekannten Suchmaschinen danach zu suchen, erhalte aber nur ungefähre Ergebnisse, die nicht zu meinem Problem passen.
Antwort1
Die Antwort vom Support bei GitLab war, dass mir in der Konfiguration die folgenden Einstellungen fehlten:
encryption: 'plain'
verify_certificates: true
Nachdem diese eingerichtet waren, konnte ich klonen und pushen. Was mir auffiel, war, dass jedem anderen, der sich anmeldete, mitgeteilt wurde, dass sein Konto gesperrt sei, bis ich es mit einem Administratorkonto entsperrte.