it-roy-ru.com

Добавление SSL-сертификатов в контейнер Docker linux

Ожидаемое поведение Возможность совершать HTTP-вызовы из контейнера

Фактическое поведение

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

Информация Я думаю, проблема в том, что мой контейнер вообще не знает о сертификатах, которые необходимо использовать для этого http-вызова. Итак, я попытался предоставить их самому контейнеру через dockerfile, который выглядит следующим образом:

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

Внутри папки PublishOutput у меня просто есть все библиотеки моего ядра .net, которые мне нужно запустить внутри контейнера Docker.

Когда я собираю dockerfile, он говорит:

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.

что заставляет меня думать, что сертификат, который я хочу использовать, на самом деле не используется. Что я делаю неправильно? Заранее спасибо!

3
Tarta

Вероятно, проблема в update-ca-certificates. Команда обрабатывает только файлы с расширением .crt. С его справочной страницы:

Сертификаты должны иметь расширение .crt, чтобы быть включенными в обновить-CA-сертификаты.

Так что просто добавьте это расширение при копировании сертификата в Dockerfile:

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

Шаги, чтобы следовать:

1) Убедитесь, что расширение сертификатов .crt

2) Откройте сертификаты для Notepad ++ или аналогичных

3) Скопируйте сертификаты в/usr/local/share/ca-сертификаты /. Команда update-ca-Certificates считывает сертификаты из этой папки: http://manpages.ubuntu.com/manpages/trusty/man8/update-ca-certificates.8.html

4) После выполнения этих шагов сборка dockerfile должна приводить к тому, что НЕ будет больше сказано 0 добавлено, 0 удалено; но 1 добавлено, 0 удалено; или аналогичный, в зависимости от того, сколько сертификатов вы добавили

5) решение может еще не быть. Сертификаты зависят от иерархии других сертификатов. Я нахожусь в Windows, и, зайдя в диспетчер сертификатов, я вижу, что мой сертификат зависит от двух более высоких сертификатов (это показано в пути сертификации):

 Certification Path

Таким образом, вы должны быть уверены, что поместили в/usr/local/share/ca-сертификаты/ВСЕ сертификаты в иерархии.

6) Тем не менее, вы можете подумать о том, чтобы пройти правильные сертификаты, но, возможно, это не так. В моем случае IdentityServer был размещен на IIS, в привязках я мог видеть, что IdentityServer действительно ожидал вызовы через https, и, дважды щелкнув по привязке, я увидел сертификат, который IdentityServer требуется для принятия вызова.

0
Tarta