Docker CE для Windows - не удалось установить SSL-соединение. удаленный сертификат недействителен в соответствии с процедурой проверки - PullRequest
0 голосов
/ 03 октября 2019

У меня возникает проблема с SSL при вызове внутреннего URL-адреса https (например, https://sample/demoapi/api/item/) из API-интерфейса .net core 2.2 в контейнере. API работает нормально при запуске вне контейнера.

Примечание. Контейнер отлично работает при монтировании папки ssl из виртуальной машины Docker thin Linux в контейнер. docker run -itd -p 5011: 80 -v / etc / ssl / certs: / etc / ssl / certs

Информационная WindowsВерсия: Win 10 Docker для Windows CE Версия: Docker CE 2.0.0.3 (не самая последняя. У меня проблема разрешения имен DNS при вызове URL-адреса из контейнера с последней версией докера CE. Docker 2.0.0.3 работает без проблем) Docker работает на компьютере под управлением Windows 10, а не на виртуальной машине. Запуск хоста и контейнеров Linux. Я выполнил следующие действия для копирования и обновления сертификата ssl в контейнер, но не работал. Docker Linux: System.Security. Authentication.AuthenticationException: удаленный сертификат является недействительным в соответствии с процедурой проверки Как добавить CКорневой сертификат в образе докера?

Действия по воспроизведению проблемы:

  1. Создание примера API ядра .net и вызов службы https следующим образом.

    try {var client = new HttpClient ();var resp = await client.GetAsync ("https://test.com"); data = await resp.Content.ReadAsStringAsync ();} catch (исключение e) {data = e.StackTrace +" - "+ e.Message +" - "+ e.InnerException;}

  2. Публикация приложения, как указано выше Тип приложения: .net core 2.2 api Публикация конфигурации: Целевая структура: .netcoreapp2.2 Метод развертывания: автономный Целевой запусквремя: linux-x64

  3. Создание образа с помощью файла Docker ОТ mcr.microsoft.com/dotnet/core/aspnet:2.2 AS время выполнения COPY Опубликовать / app / COPY ./certf.crt/usr/local/share/ca-certificates/certf.crt RUN chmod 644 /usr/local/share/ca-certificates/certf.crt && update-ca-сертификаты ENTRYPOINT ["dotnet", "app / testapp1.dll"]

  4. Запустить команду docker - docker run -itd -p 5011: 80 --name demoapi demoapi

  5. Просмотр URL http://localhost:5011/api/vales/ исм. ошибку

Получена ошибка: в System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore (Поток потока, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) в System.Threading.Tasks.ValueTask1.get_Result () в System.Net.Http.HttpConnectionPool.CreateConnectionAsync (запрос HttpRequestMessage.Tell.Token.Text.Text.Text.Tak.Text.Tak)Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask1 creationTask) в System.Threading.Tasks.ValueTask1.get_Result () в System.Net.Http.HttpConnectionPool. RedirectHandler.SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken)в System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) в demoapiapp1.Controllers.ValuesController.Get (идентификатор Int32: \\:---- Не удалось установить SSL-соединение, см. Внутреннее исключение. <--------------------> System.Security.Authentication.AuthenticationException: удаленный сертификат недействителен в соответствии с процедурой проверки. на System.Net.Security.SslState.StartSendAuthResetSignal (ProtocolToken сообщение, AsyncProtocolRequest AsyncRequest, ExceptionDispatchInfo исключение) в System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken сообщение, AsyncProtocolRequest AsyncRequest) в System.Net.Security.SslState.StartSendBlob (байт [] входящий, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (буфер Byte [], счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReadFray, read32 [readteB], чтение32AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (буфер Byte [], AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.CheckCompletionBeforeNextReart.Secsec.Secsec.SecSecSecSecSecSecSecSecSecSecSecSecSecSecSecSecSecSecSecNetSecNetSecNetNetByte [] входящий, число Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (Byte[] буфер, число Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReadFrame (буфер Byte [], Int32 readBytes, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslestState.PartialReyncall_ReignSyncRealSecrateCaseтрассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Net.Security.SslState.ThrowIfExceptional () в System.Net.Security.SslState.InternalEndProcessAuthentication (LazyAsyncResult lazyResult) в System.Net.Security.SslState.EndPro (Результат IAsyncResult) в System.Net.Security.SslStream.EndAuthenticateAsClient (IAsyncResult asyncResult) в System.Net.Security.SslStream. <> C.b__47_1 (IAsyncResult iar) в System.Threading.kyscory.FySactSignSignSignSignSirectFirectory.TyCFendFunction, Action1 endAction, обещание Task`1, Boolean требует синхронизация) --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore (потоковый поток, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)

1 Ответ

0 голосов
/ 04 октября 2019

Нашел проблему и решил ее. Публикуйте это, чтобы помочь любому, кто испытывает ту же проблему.

Я использовал неправильный сертификат. Используемый сертификат - это сертификат центра сертификации (корневой сертификат), но я использовал сертификат, выданный системе. Я сгенерировал корневой сертификат из цепочки и импортировал в контейнер с помощью разрешения «stakoverlow», указанного выше.

Разрешение: Сертификат ca называется ca-cert.crt. Добавлены следующие строки Dockerfile.

COPY ca-cert.crt /usr/local/share/ca-certificates/ca-cert.crt RUN chmod 644 / usr / local / share / ca-Certificates / ca-cert.crt && update-ca-сертификаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...