So sichern Sie GitLab mit Let’s Encrypt unter Ubuntu 16.04

Einführung

GitLab, insbesondere GitLab CE (Community Edition), ist eine Open-Source-Anwendung, die hauptsächlich zum Hosten von Git-Repositorys verwendet wird und zusätzliche entwicklungsbezogene Funktionen wie die Problemverfolgung bietet. Das GitLab-Projekt macht es relativ einfach, eine GitLab-Instanz mit einem einfachen Installationsmechanismus auf Ihrer eigenen Hardware einzurichten.

Standardmäßig liefert GitLab Seiten über einfaches, unverschlüsseltes HTTP. Wie jede Webanwendung, die vertrauliche Informationen wie Anmeldeinformationen verarbeitet, sollte GitLab so konfiguriert sein, dass Seiten über TLS / SSL zur Verschlüsselung von Daten während der Übertragung bereitgestellt werden. Dies ist bei GitLab äußerst wichtig, da die Codebasis Ihres Projekts von jemandem geändert werden kann, der Ihre Anmeldeinformationen abfängt.

Mit dem Let’s Encrypt-Projekt können vertrauenswürdige SSL-Zertifikate für jede Website oder Webanwendung auf einfache Weise abgerufen werden. Let’s Encrypt bietet Zertifikate an, die von der Zertifizierungsstelle signiert wurden, die von allen modernen Webbrowsern als vertrauenswürdig eingestuft wird, wenn Sie nachweisen können, dass Sie die Domäne besitzen, für die Sie ein Zertifikat anfordern.

In diesem Handbuch wird gezeigt, wie eine unter Ubuntu 16.04 installierte GitLab-Instanz für die Verwendung eines vertrauenswürdigen SSL-Zertifikats konfiguriert wird, das von Let’s Encrypt bezogen wurde. Dies sichert die gesamte ausgehende Kommunikation mit den Benutzern und stellt sicher, dass Kennwörter, Code und andere Mitteilungen vor dem Lesen oder Manipulieren durch Dritte geschützt sind.

Voraussetzungen

Um dieses Handbuch zu vervollständigen, muss eine GitLab-Instanz auf einem Ubuntu 16.04-Server installiert sein. Wir gehen davon aus, dass Sie unsere https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-gitlab-on-ubuntu-16-04-Anleitung zur Installation und Konfiguration von GitLab unter Ubuntu befolgt haben 16.04] Anleitung zum Einrichten.

Um ein Zertifikat von Let’s Encrypt zu erhalten, muss Ihr Server mit einem vollqualifizierten Domänennamen (FQDN) konfiguriert sein. Wenn Sie noch keinen registrierten Domainnamen haben, können Sie einen bei einem der vielen Domainnamen-Registrare registrieren (z. Namecheap, GoDaddy usw.).

Wenn Sie dies noch nicht getan haben, müssen Sie einen * A-Eintrag * erstellen, der Ihre Domain auf die öffentliche IP-Adresse Ihres Servers verweist. Dies ist erforderlich, da Let’s Encrypt überprüft, ob Sie die Domäne besitzen, für die ein Zertifikat ausgestellt wird. Wenn Sie beispielsweise ein Zertifikat für "+ gitlab.example.com +" erhalten möchten, muss diese Domain auf Ihren Server aufgelöst werden, damit der Überprüfungsprozess funktioniert. Sie benötigen eine echte Domain mit gültigen DNS-Einträgen, die auf Ihren Server verweisen, um dieses Handbuch erfolgreich abzuschließen.

Installieren Sie Certbot, den Let’s Encrypt Client

Bevor wir ein SSL-Zertifikat für unsere GitLab-Installation erhalten können, müssen wir Certbot, den offiziellen Let’s Encrypt-Client, herunterladen und installieren.

Die Certbot-Entwickler unterhalten ein eigenes Ubuntu-Software-Repository mit aktuellen Versionen der Software. Da sich Certbot in einer solchen aktiven Entwicklung befindet, lohnt es sich, dieses Repository zu verwenden, um einen neueren Certbot als den von Ubuntu bereitgestellten zu installieren.

Fügen Sie zunächst das Repository hinzu:

sudo add-apt-repository ppa:certbot/certbot

Sie müssen + ENTER drücken, um zu akzeptieren. Aktualisieren Sie anschließend die Paketliste, um die Paketinformationen des neuen Repositorys abzurufen:

sudo apt-get update

Und zum Schluss installieren Sie Certbot mit + apt-get:

sudo apt-get install certbot

Nach der Installation von Certbot können wir unseren Server so vorbereiten, dass er erfolgreich auf die Domain-Besitz-Überprüfungstests reagiert, die Let’s Encrypt vor dem Ausstellen eines Zertifikats benötigt.

Bereiten Sie sich auf die Überprüfung der Web-Root-Domain für Let’s Encrypt vor

Um ein SSL-Zertifikat von der Let’s Encrypt-Zertifizierungsstelle zu erhalten, müssen wir nachweisen, dass wir die Domain besitzen, für die das Zertifikat bereitgestellt wird. Es gibt mehrere Methoden zum Nachweis des Domänenbesitzes, für die jeweils Root- oder Administratorzugriff auf den Server erforderlich ist.

GitLab enthält einen intern verwalteten Nginx-Webserver für die Bedienung der Anwendung. Dies macht die Installation ziemlich eigenständig, erhöht jedoch die Komplexität beim Versuch, den Webserver selbst zu ändern.

Da das eingebettete Nginx derzeit verwendet wird, um GitLab selbst zu bedienen, ist die beste Domain-Validierungsmethode die Web-Root-Methode. Certbot verwendet den vorhandenen Webserver, um eine bekannte Datei vom Server auf Port 80 bereitzustellen. Dies beweist der Zertifizierungsstelle, dass die Person, die das Zertifikat anfordert, die administrative Kontrolle über den Webserver hat, wodurch der Besitz über den Server und die Domäne effektiv nachgewiesen wird.

Um die Validierung der Web-Root-Domain für GitLab einzurichten, müssen Sie zunächst einen Dummy-Root für das Dokument erstellen:

sudo mkdir -p /var/www/letsencrypt

Dies wird von normalen Nginx-Vorgängen nicht verwendet, wird jedoch von Certbot für die Domänenüberprüfung verwendet.

Als nächstes müssen wir die Nginx-Konfiguration von GitLab anpassen, um dieses Verzeichnis zu verwenden. Öffnen Sie die Hauptkonfigurationsdatei von GitLab, indem Sie Folgendes eingeben:

sudo nano /etc/gitlab/gitlab.rb

Im Inneren müssen wir eine Zeile einfügen, die eine benutzerdefinierte Direktive in die Nginx-Konfigurationsdatei von GitLab einfügt. Am besten scrollen Sie zum Abschnitt * GitLab Nginx * der Datei, aber die Zeile kann an einer beliebigen Stelle platziert werden.

Füge folgende Zeile ein:

/etc/gitlab/gitlab.rb

. . .
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
. . .

Mit der Webstamm-Überprüfungsmethode "Let’s Encrypt" wird eine Datei in einem bekannten Verzeichnis im Dokumentenstamm abgelegt, damit die Zertifizierungsstelle sie validieren kann. Diese Zeile weist Nginx an, Anfragen nach "+ /. Well-known +" aus dem Webstamm zu bearbeiten, den wir vor kurzem erstellt haben.

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Übernehmen Sie als Nächstes die Änderungen an der Nginx-Konfiguration von GitLab, indem Sie die Anwendung erneut konfigurieren:

sudo gitlab-ctl reconfigure

Der Server sollte nun so eingerichtet sein, dass Ihre Domain erfolgreich validiert wird.

Fordern Sie mit Certbot ein Zertifikat an

Nachdem die Nginx-Instanz von GitLab mit dem erforderlichen Standortblock konfiguriert wurde, können wir mit Certbot unseren Domain-Namen validieren und ein Zertifikat anfordern.

Da wir nur ein Zertifikat möchten und den Webserver nicht automatisch konfigurieren möchten, verwenden wir den Unterbefehl "+ certonly". Wir werden drei Optionen angeben. Wir müssen den Web-Root-Authentifikator auswählen (+ - webroot +), den Dokument-Root übergeben (+ - webroot-path = / var / www / letsencrypt +) und den Befehl + -d + verwenden, um zu übergeben unser Domainname:

sudo certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d

Sie werden aufgefordert, eine E-Mail-Adresse anzugeben. Es ist wichtig, eine gültige E-Mail-Adresse anzugeben, da nur so E-Mails über das Ablaufen von Zertifikaten und andere wichtige Informationen zuverlässig empfangen werden können. Sie werden außerdem aufgefordert, die Nutzungsbedingungen von Let’s Encrypt zu akzeptieren.

Sobald Sie fertig sind, sollte Let’s Encrypt Ihnen ein Zertifikat für die Domain ausstellen, wenn die Inhaberschaft korrekt validiert werden konnte. Sie sollten eine Ausgabe sehen, die ungefähr so ​​aussieht:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/gitlab.example.com/fullchain.pem. Your cert
  will expire on 2017-07-26. To obtain a new or tweaked version of
  this certificate in the future, simply run certbot again. To
  non-interactively renew *all* of your certificates, run "certbot
  renew"
- If you lose your account credentials, you can recover through
  e-mails sent to [email protected].
- Your account credentials have been saved in your Certbot
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Certbot so
  making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

Sie finden alle Zertifikate und Schlüssel, die erstellt wurden, indem Sie das Verzeichnis "+ / etc / letsencrypt / live / " mit den Rechten " sudo +" durchsuchen:

sudo ls /etc/letsencrypt/live/
Outputcert.pem  chain.pem  fullchain.pem  privkey.pem

Für unsere Konfiguration müssen wir nur den vollständigen Pfad zu den Dateien + fullchain.pem + und + privkey.pem + kennen.

Konfigurieren Sie GitLab für die Verwendung der Let’s Encrypt-Zertifikate

Nachdem wir vertrauenswürdige Zertifikate von Let’s Encrypt erhalten haben, können wir GitLab so konfigurieren, dass TLS / SSL für den gesamten Datenverkehr verwendet wird.

Bearbeiten Sie die GitLab-Konfiguration

Öffnen Sie zunächst die GitLab-Konfigurationsdatei erneut:

sudo nano /etc/gitlab/gitlab.rb

Ändern Sie oben das + external_url +. Derzeit wird wahrscheinlich auf "+ http: // " verwiesen. Wir müssen nur das ` http` in` + https` ändern:

/etc/gitlab/gitlab.rb

. . .
external_url 'http://'
. . .

Scrollen Sie als Nächstes zurück zum Abschnitt * GitLab Nginx *. Kommentieren Sie die folgenden Zeilen aus und ändern Sie sie oder fügen Sie sie einfach hinzu.

Die Umleitungsleitung weist Nginx an, die an den HTTP-Port 80 gestellten Anforderungen automatisch an den HTTPS-Port 443 umzuleiten. Die Zeile "+ ssl_certificate " sollte auf den vollständigen Pfad der Datei " fullchain.pem " verweisen, während die Zeile " ssl_certificate_key " auf den vollständigen Pfad der Datei " privkey.pem +" verweisen sollte:

/etc/gitlab/gitlab.rb

. . .
nginx['redirect_http_to_https'] =
. . .
nginx['ssl_certificate'] = "/etc/letsencrypt/live//fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live//privkey.pem"
. . .

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

HTTPS-Verkehr durch die Firewall zulassen

Vergewissern Sie sich vor dem erneuten Laden der Nginx-Konfiguration von GitLab, dass HTTPS-Datenverkehr durch die Firewall Ihres Servers zugelassen ist. Sie können Port 443 zu diesem Zweck öffnen, indem Sie Folgendes eingeben:

sudo ufw allow https
OutputRule added
Rule added (v6)

Überprüfen Sie, ob Port 443 geöffnet ist, indem Sie Folgendes eingeben:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere

OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)

Wie Sie sehen können, ist Port 443 nun freigelegt.

Konfigurieren Sie GitLab neu, um SSL zu aktivieren

Konfigurieren Sie GitLab jetzt erneut, um Ihre Änderungen zu implementieren:

sudo gitlab-ctl reconfigure

Ihre GitLab-Instanz sollte jetzt über HTTPS mit Ihrem vertrauenswürdigen Let’s Encrypt-Zertifikat erreichbar sein. Sie können dies testen, indem Sie den Domain-Namen Ihres GitLab-Servers aufrufen. Da wir HTTP zu HTTPS umleiten, sollte dies ohne explizite Angabe eines Protokolls funktionieren:

http://

Ihr Browser sollte Sie automatisch zur Verwendung von HTTPS umleiten. In der Adressleiste sollte ein Hinweis darauf angezeigt werden, dass die Site gesichert ist:

Ihre GitLab-Installation ist jetzt mit einem TLS / SSL-Zertifikat geschützt.

Überprüfen der automatischen Erneuerung von Certbot

Let´s Encrypt-Zertifikate sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Zertifikaterneuerungsprozess zu automatisieren. Das von uns installierte "+ certbot " - Paket erledigt dies für uns, indem es "certbot renew" zweimal täglich über einen systemd-Timer ausführt. Bei Nicht-Systemdistributionen wird diese Funktionalität durch ein Skript bereitgestellt, das sich in ` / etc / cron.d +` befindet. Diese Aufgabe wird zweimal täglich ausgeführt und erneuert alle Zertifikate, die innerhalb von 30 Tagen nach dem Ablaufdatum vorliegen.

Um den Erneuerungsprozess zu testen, können Sie mit + certbot + einen Probelauf durchführen:

sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie fertig. Bei Bedarf erneuert Certbot Ihre Zertifikate und lädt Nginx neu, um die Änderungen zu übernehmen. Wenn die automatische Erneuerung jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail-Adresse und warnt Sie, wenn Ihr Zertifikat in Kürze abläuft.

Fazit

Ihre GitLab-Instanz sollte jetzt durch ein sicheres TLS / SSL-Zertifikat geschützt sein, das von allen modernen Browsern als vertrauenswürdig eingestuft wird. Die Konfiguration der eingebetteten Nginx-Instanz ist etwas komplexer als das Einrichten eines eigenständigen Nginx-Webservers, da GitLab die Funktionen zum Anpassen von Standortblöcken in seiner Konfigurationsdatei bereitstellt.

Nachdem Ihre GitLab-Instanz jetzt sicher ist, kann sie sicher zum Verwalten von Projekten, zum Hosten von Code-Repositorys und zum Konfigurieren der kontinuierlichen Integration verwendet werden. In unserem Artikel unter https://www.digitalocean.com/community/tutorials/how-to-set-up-continuous-integration-pipelines-with-gitlab- erfahren Sie, wie Sie GitLab zum automatischen Testen jedes Commits in Ihrem Repository verwenden. ci-on-ubuntu-16-04 [Einrichten von Continuous Integration Pipelines mit GitLab CI].