wake-up-neo.net

Hinzufügen von SSL-Zertifikaten zum Docker-Linux-Container

Erwartetes Verhalten HTTPs-Aufrufe vom Container aus ausführen können

Tatsächliches Verhalten

System.InvalidOperationException: IDX10803: Unable to obtain configuration from: 'https://identity.test.frissplatform.eu/.well-known/openid-configuration'. ---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'https://identity.test.frissplatform.eu/.we
ll-known/openid-configuration'. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: SSL connect error

Information Ich denke, das Problem ist, dass mein Container die Zertifikate, die für diesen http-Aufruf verwendet werden müssen, überhaupt nicht kennt. Also habe ich versucht, sie über eine Docker-Datei, die so aussieht, dem Container selbst zur Verfügung zu stellen:

FROM Microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

#Copy csproj and restore as distinct layers
COPY PublishOutput/. ./

FROM Microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app .

COPY Certificates/myCertificate.cer /usr/local/share/ca-certificates/myCertificate
RUN update-ca-certificates

ENTRYPOINT ["dotnet", "CaseApi.Web.dll"]

Im Ordner " PublishOutput " befinden sich nur die DLLs meiner .net-Core-API, die ich im Docker-Container ausführen muss.

Wenn ich die Docker-Datei baue, heißt es:

Step 8/9 : RUN update-ca-certificates
 ---> Running in b025a42f2edc
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

das lässt mich denken, dass das Zertifikat, das ich verwenden möchte, nicht wirklich verwendet wird. Was mache ich falsch? Danke im Voraus!

3
Tarta

Wahrscheinlich liegt das Problem in update-ca-certificates. Der Befehl verarbeitet nur Dateien mit der Erweiterung .crt. Aus seiner Manpage:

Zertifikate müssen die Erweiterung .crt haben, damit sie von Update-ca-certificate aufgenommen werden können.

Fügen Sie diese Erweiterung einfach hinzu, wenn Sie das Zertifikat in die Docker-Datei kopieren:

COPY Certificates/myCertificate.cer /usr/local/share/ca-certificates/myCertificate.crt
1
Ignacio Millán

Schritte zum folgen:

1) Stellen Sie sicher, dass die Erweiterung der Zertifikate .crt ist

2) Öffnen Sie die Zertifikate in Notepad ++ oder ähnlichem

3) Kopieren Sie die Zertifikate nach/usr/local/share/ca-certificate /. Der Befehl update-ca-certificate liest die Zertifikate aus diesem Ordner: http://manpages.ubuntu.com/manpages/trusty/man8/update-ca-certificates.8.html

4) Nach diesen Schritten sollte das Erstellen der Docker-Datei dazu führen, dass NICHT mehr 0 hinzugefügt, 0 entfernt; aber 1 hinzugefügt, 0 entfernt; oder ähnlich, je nachdem, wie viele Zertifikate Sie hinzugefügt haben

5) Lösung kann noch nicht da sein. Zertifikate hängen von einer Hierarchie anderer Zertifikate ab. Ich bin in Windows und wenn ich zum Certificate Manager gehe, kann ich sehen, dass mein Zertifikat von zwei höheren abhängt (dies wird im Zertifizierungspfad angezeigt):

 Certification Path

Daher müssen Sie sicherstellen, dass Sie die Zertifikate in der Hierarchie in/usr/local/share/ca-certificate/ALL ablegen.

6) Vielleicht überlegen Sie vielleicht, die richtigen Zertifikate zu bestehen, aber vielleicht sind Sie es nicht. In meinem Fall wurde IdentityServer auf IIS gehostet. In den Bindungen konnte ich sehen, dass IdentityServer tatsächlich Anrufe über https erwartete. Durch Doppelklicken auf die Bindung konnte ich das Zertifikat sehen, das IdentityServer für die Annahme des Anrufs benötigt.

0
Tarta