У меня возникает проблема с 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Корневой сертификат в образе докера?
Действия по воспроизведению проблемы:
Создание примера 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;}
Публикация приложения, как указано выше Тип приложения: .net core 2.2 api Публикация конфигурации: Целевая структура: .netcoreapp2.2 Метод развертывания: автономный Целевой запусквремя: linux-x64
Создание образа с помощью файла 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"]
Запустить команду docker - docker run -itd -p 5011: 80 --name demoapi demoapi
- Просмотр 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)