CA-Zertifikat im Docker-Container

Für die Anbindung von Diensten mit selbstsigniertem oder unternehmensinternem TLS-Zertifikat muss die zugehörige Root- oder Intermediate-CA als vertrauenswürdig hinterlegt werden, damit Relution die Verbindung als vertrauenswürdig einstuft. Je nach Relution-Version kommen dafür unterschiedliche Verfahren zum Einsatz.


Zertifikate über die Benutzeroberfläche hinterlegen

Neu in 26.4

Das Docker-Image von Relution basiert ab Version 26.4 auf Ubuntu statt auf AlmaLinux. Dadurch entfällt im Container der Pfad /etc/pki/ca-trust/source/anchors/, sodass ein Copy-Skript auf Basis dieses Pfads fehlschlägt. Ab Relution 26.4 erfolgt die Hinterlegung von CA-Zertifikaten daher über die Benutzeroberfläche — ein Vorteil dabei ist zudem, dass sich die Konfiguration so auch im laufenden Betrieb anpassen lässt.

Dafür sind folgende Schritte erforderlich:

  • Ein bestehendes Prerun-Script (Umgebungsvariable RELUTION_PRERUN_SCRIPT in der compose.yaml, bei älteren Installationen in der docker-compose.yml) wird aus der Konfiguration entfernt, anschließend wird der Relution-Container neu gestartet.
  • Die Anmeldung erfolgt in der globalen Organisation.
  • Unter Einstellungen → Zertifikate werden die gewünschten CA-Zertifikate hochgeladen (siehe Zertifikatsverwaltung →).
  • Unter Einstellungen → TLS-Vertrauenskonfiguration → Vertrauenswürdige Zertifikate werden die hochgeladenen CA-Zertifikate über Hinzufügen aus der Zertifikatsbibliothek ausgewählt und die Konfiguration anschließend mit Speichern übernommen.

Zur Auswahl stehen nur CA-Zertifikate, die als einzelnes Zertifikat (z. B. im Format PEM, DER oder CRT) hochgeladen wurden. Serverzertifikate ohne CA-Kennzeichen sowie PKCS#12-Dateien (.p12, .pfx) erscheinen nicht in der Auswahl. Weitere Details zur Seite stehen unter TLS-Vertrauenskonfiguration →.

Die hinterlegten CA-Zertifikate gelten zusätzlich zum Standard-Truststore des Systems für ausgehende TLS-Verbindungen des Relution-Servers. Der Trust Store des Container-Betriebssystems wird dabei nicht verändert, sodass Werkzeuge im Container (z. B. curl) der CA weiterhin nicht vertrauen. Die Zertifikate werden erst am Ende des Serverstarts geladen; für Verbindungen, die bereits während des Starts aufgebaut werden (z. B. zu einem S3-Objektspeicher), siehe S3: Start bricht mit PKIX-Fehler ab →.


Script-basierte Einbindung (vor Relution 26.4)

Anleitung anzeigen

Bei Relution-Versionen vor 26.4 — mit einem Docker-Image auf AlmaLinux-Basis — kann ein Zertifikat wie im Folgenden beschrieben über ein Prerun-Script in den Container geladen werden. Im Beispiel ist im Verzeichnis, in dem die docker-compose.yml abgelegt wurde, ein Unterverzeichnis selfsigned angelegt, in dem das Zertifikat und das zugehörige Script liegen. In diesem Ordner wird eine Datei mit folgendem Inhalt angelegt. Im Beispiel trägt die Datei den Namen trust_selfsigned.sh. Das zu kopierende Zertifikat hat den Dateinamen CAcert.pem.

Zudem ist im Zuge einer geplanten Umstellung auf einen rootless-Container vorgesehen, dass eine nachträgliche Installation von Zertifikaten über die CLI generell nicht mehr möglich sein wird.

Beim Ausführen des Prerun-Scripts erscheint auf einem Docker-Image ab Relution 26.4 folgende Fehlermeldung:

INFO: Source pre-run script from /opt/selfsigned/trust_selfsigned.sh
cp: cannot create regular file '/etc/pki/ca-trust/source/anchors/': No such file or directory

Script

#!/bin/bash

cp /opt/selfsigned/CAcert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust
echo "Self-signed CA certificate has been added to OS trust store"

Als Nächstes müssen in der docker-compose.yml das Script und das Zertifikat gemountet werden.

Script und Zertifikat mounten

services:
  relution:
    environment:
      ...
      - RELUTION_PRERUN_SCRIPT=/opt/selfsigned/trust_selfsigned.sh
    ...
    volumes:
      - './application.yml:/opt/relution/application.yml'
      - './selfsigned:/opt/selfsigned'

Ausgabe des Curl

Die Funktion kann mit einem CURL getestet werden.

[root@d4b846425890 relution]# curl -I https://selfsigned.server.relution.io
HTTP/1.1 302 Found
Date: Tue, 21 Sep 2021 12:37:10 GMT
Server: Apache/2.4.38
Location: https://selfsigned.server.relution.io/portal/
Content-Type: text/html; charset=iso-8859-1
Top