Настройка пользовательских загруженных сертификатов A1 в Docker-контейнере - PullRequest
0 голосов
/ 24 апреля 2019

У меня очень специфическая ситуация:

Веб-сайт, который использует конечные точки веб-службы WCF с помощью рукопожатия TSL.Многие пользователи могут зарегистрироваться на этом сайте, загрузить свои сертификаты A1 и использовать конечные точки веб-службы через эту систему.

Локально, в Windows, размещенной в IIS, он прекрасно работал, когда пользователь загружает свой сертификат, он сохраняется в базе данных как большой двоичный объект, когда мне нужно поговорить с веб-службой, я делаю следующее:

certificate = new X509Certificate2(company.Certificate.File, password, X509KeyStorageFlags.MachineKeySet);

// the SendFileServiceClient object is an auto-generated object, created when the WCF web service was registered
var sendFile = new SendFileServiceClient();

sendFile.ClientCredentials.ClientCertificate.Certificate = certificate;

await sendFile.OpenAsync();
answer = await sendFile.SendFileAsync(XElement.Parse(xmlFile));
await sendFile.CloseAsync();

Но проблема возникает, когда я контейнер приложения.С докером это не работает, я могу загрузить свой сертификат, большой двоичный объект создается в БД, я даже могу получить его и создать объект X509Certificate2 (вся информация о сертификате есть, когда я проверяю его во время отладки), нов строке answer = я получаю следующее:

Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями 'webservices.foo.bar'

Вот трассировка стека:

   at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Security.SslState.ThrowIfExceptional()
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
   at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
   at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__47_1(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)

База для моего образа Docker:
FROM microsoft/dotnet:2.2-aspnetcore-runtime

Может кто-нибудь сказать мне, в чем здесь проблема?Можно ли даже сделать то, что мне нужно, с помощью образа докера?

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