web-dev-qa-db-fra.com

Comment ajouter un certificat racine CA dans une image Docker?

J'exécute une API Web ASP.NET Core 1.1 dans un conteneur Docker 1.13.1 sur Ubuntu 14.04.

Lorsque le code tente de récupérer certaines données d'un serveur HTTPS, j'obtiens cette erreur d'authentification de certificat:

 An error occurred while sending the request. ---> System.Net.Http.CurlException: Peer certificate cannot be authenticated with given CA certificates
   at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)
   at System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper, CURLcode messageResult)

Le serveur HTTPS est interne avec un certificat signé par notre autorité de certification d'entreprise, alors sachez que je devrai peut-être enregistrer l'autorité de certification interne.

Tout ce que j'ai trouvé jusqu'à présent sur cette erreur et Docker parle de faire fonctionner Docker lui-même, de se connecter aux dépôts, etc. Mon Docker fonctionne correctement et l'API Web s'exécute sur le serveur Ubuntu en dehors du conteneur sans problème.

1) Dois-je ajouter un certificat racine CA dans une image Docker?

2) Si oui, comment dois-je procéder?

3) Sinon, comment puis-je résoudre ce problème?

15
Peter

La tâche elle-même n'est pas spécifique à Docker car vous devez également ajouter cette autorité de certification sur un système normal. Il y a une réponse sur la communauté askubunt sur la façon de procéder.

Donc dans un Dockerfile vous feriez ce qui suit (n'oubliez pas chmod au cas où vous exécutez le conteneur avec un utilisateur autre que root):

ADD your_ca_root.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
25
cebe

Il convient également de noter que cela doit absolument utiliser l'extension .crt. J'ai d'abord essayé cela avec un fichier cert .pem (je pensais qu'ils étaient interchangeables, donc d'autres pourraient aussi), qui n'est pas lié par update-ca-certificates.

2
damiankloip