Ich versuche, das Omnibus-Installationsprogramm von GitLab auszuführen und das SSL-Zertifikat meiner Organisation zu verwenden, aber SSL-Clients beschweren sich, dass der Zertifikatsaussteller unbekannt ist. Wie soll ich Zwischenzertifikate in der Vertrauenskette konfigurieren?
Mein Setup beginnt mit der Ausführung der neuesten Version von GitLab und der Bereitstellung von Ports unter anderem für HTTPS und HTTP:
sudo docker run --detach --hostname myserver.myorg.org --publish 1443:443 --publish 1080:80 \
--publish 2222:22 --publish 5005:5005 --name gitlab1 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.2.3-ce.0
Dadurch werden eine Reihe von Standardkonfigurationen in erstellt /srv/gitlab/config
, also lege ich die URL des Servers in fest gitlab.rb
:
external_url 'https://myserver.myorg.org'
Ich habe von meiner Organisation eine Zertifikatsdatei und eine Schlüsseldatei erhalten, also kopiere ich sie in das /srv/gitlab/config/ssl
Verzeichnis als myserver.myorg.org.crt
und myserver.myorg.org.key
. Dann konfiguriere ich den GitLab-Server neu:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
Nun versuche ich die SSL-Konfiguration zu validieren:
echo | gnutls-cli -p1443 myserver.myorg.org
Ich erhalte eine Reihe von Fehlern in der Ausgabe, unter anderem diese:
...
Processed 129 CA certificate(s).
Resolving 'myserver.myorg.org:1443'...
Connecting to '127.0.0.1:1443'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
...
- Status: The certificate is NOT trusted. The certificate issuer is unknown.
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.
Das sieht so aus, als ob ich nicht die komplette Vertrauenskette habe. Der Aussteller für das Zertifikat unserer Organisation ist "CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US". Ich habe ihre Zertifikate gefunden aufIhre Website, und habe genau dieses heruntergeladen:
wget https://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt.pem
Ich habe die Textversion des Zertifikats extrahiert:
openssl x509 -in DigiCertTLSRSASHA2562020CA1-1.crt.pem -text
...
-----BEGIN CERTIFICATE-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----END CERTIFICATE-----
Ich habe das an das Zertifikat meiner Organisation angehängt, /srv/gitlab/config/ssl/myserver.myorg.org.crt
sodass jetzt zuerst das Zertifikat der Organisation und dann das Digicert-Zertifikat angezeigt wird.
-----BEGIN CERTIFICATE-----
... our organization's certificate ...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... Digicert certificate I just downloaded
-----END CERTIFICATE-----
Dies ist der Schritt, bei dem ich mir am wenigsten sicher bin. Ich stütze mich auf dieGitLab-Anweisungen:
Stellen Sie sicher, dass Sie die vollständige Zertifikatskette verwenden, um SSL-Fehler bei der Verbindung von Clients zu vermeiden. Die Reihenfolge der vollständigen Zertifikatskette sollte aus dem Serverzertifikat zuerst, allen Zwischenzertifikaten und zuletzt der Stammzertifizierungsstelle bestehen.
Bedeutet das, dass die beiden Zertifikate einfach in derselben Datei zusammengeheftet werden?
Wie dem auch sei, ich habe den reconfigure
Befehl ausgeführt und noch einmal getestet:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
...
echo | gnutls-cli -p1443 myserver.myorg.org
Ich erhalte immer noch die gleichen Fehler, einschließlich „Ich habe eine Zertifikatsliste mit 1 Zertifikat erhalten.“ Das lässt mich vermuten, dass ich das Digicert-Zertifikat nicht richtig zur Kette hinzugefügt habe. Ich habe auch versucht, das Digicert-Zertifikat vor das Zertifikat unserer Organisation zu setzen.
Um sicherzugehen, dass die Zertifikate gültig sind, habe ichdieser Beitrag. openssl s_server
und openssl s_client
haben gut zusammen funktioniert, daher denke ich, dass das Problem an meiner GitLab-Konfiguration liegt.
Antwort1
Als ich las,GitLab-DokumentationBei genauerem Hinsehen wurde mir klar, dass ich den Unterschied zwischen reconfigure
und falsch verstanden hatte hup nginx
.
Wenn der Inhalt Ihrer SSL-Zertifikate aktualisiert wurde, aber keine Konfigurationsänderungen an gitlab.rb vorgenommen wurden, wirkt sich die Neukonfiguration von gitlab-ctl nicht auf NGINX aus. Führen Sie stattdessen sudo gitlab-ctl hup nginx aus, damit NGINX die vorhandene Konfiguration und die neuen Zertifikate ordnungsgemäß neu lädt.
Ich dachte, reconfigure
ich könnte alles machen und hup nginx
noch viel mehr. Es stellte sich heraus, dass reconfigure
Sie keine Änderung in den Zertifikatsdateien bemerken, wenn Sie nichts in der /srv/gitlab/config/gitlab.rb
Datei geändert haben.
Ich habe mein Problem behoben, indem ich diesen Befehl ausgeführt habe, nachdem ich das Zwischenzertifikat an Folgendes angehängt hatte /srv/gitlab/config/ssl/myserver.myorg.org.crt
:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl hup nginx"