web-dev-qa-db-fra.com

Ajout de certificats SSL au conteneur Docker Linux

Comportement attendu Pouvoir faire des appels HTTP depuis le conteneur

Comportement réel

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 Je pense que le problème est que mon conteneur ne connaît pas du tout les certificats qui doivent être utilisés pour cet appel http. Donc, ce que j'ai essayé de faire, c'est de les fournir au conteneur lui-même via le fichier de dock qui ressemble à ceci:

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"]

Dans le dossier PublishOutput , je n'ai que toutes les dll de mon API .net que je dois exécuter dans le conteneur Docker.

Lorsque je crée le fichier docker, il est écrit:

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.

ce qui me fait penser que le certificat que je veux utiliser n'est pas vraiment utilisé. Qu'est-ce que je fais mal? Merci d'avance!

3
Tarta

Le problème est probablement dans update-ca-certificates. La commande ne traite que les fichiers portant l'extension .crt. De sa page de manuel:

Les certificats doivent avoir une extension .crt pour être inclus avant le update-ca-certificates.

Ajoutez donc simplement cette extension lors de la copie du certificat dans le fichier Dockerfile:

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

Étapes à suivre:

1) Assurez-vous que l'extension des certificats est .crt

2) Ouvrez les certificats à Notepad ++ ou similaire

3) Copiez les certificats dans/usr/local/share/ca-certificats /. La commande update-ca-certificates lit les certificats de ce dossier: http://manpages.ubuntu.com/manpages/trusty/man8/update-ca-certificates.8.html

4) Après ces étapes, la construction du fichier docker devrait aboutir à ne plus dire que 0 ajouté, 0 supprimé; mais 1 ajouté, 0 supprimé; ou similaire, selon le nombre de certificats que vous avez ajoutés

5) la solution n'est peut-être pas encore là. Les certificats dépendent d'une hiérarchie d'autres certificats. Je suis dans Windows et en allant dans le gestionnaire de certificats, je peux voir que mon certificat dépend de 2 certificats plus élevés (cela est indiqué dans le chemin de certification):

 Certification Path

Ainsi, vous devez vous assurer de placer dans/usr/local/share/ca-certificats/ALL les certificats de la hiérarchie.

6) Pourtant, vous pensez peut-être passer les bons certificats mais peut-être que non. Dans mon cas, IdentityServer était hébergé sur IIS. Dans les liaisons, je pouvais voir qu'IdentityServer attendait effectivement des appels via https. En double-cliquant sur la liaison, je pouvais voir le certificat que IdentityServer avait besoin pour accepter l'appel.

0
Tarta