SslStream: при обработке сертификата произошла неизвестная ошибкаC#

Место общения программистов C#
Ответить
Anonymous
 SslStream: при обработке сертификата произошла неизвестная ошибка

Сообщение Anonymous »

Я пытаюсь установить TCP-соединение с удаленным сервером с использованием протокола SslStream и TLS 1.2. Код следующий:

Код: Выделить всё

_tcpClient.Connect(endPoint);

var certificate = new X509Certificate2(_settings.CertificateFilePath, _settings.CertificatePassword, X509KeyStorageFlags.MachineKeySet);
var certificates = new X509CertificateCollection { certificate };

_nStream = _tcpClient.GetStream();
_sslStream = new SslStream(_nStream, false,
(o, x509Certificate, chain, errors) => true,
(o, s, collection, x509Certificate, issuers) =>
{ return collection[0]; }
);

_sslStream.AuthenticateAsClient(_settings.HostIpAddress, certificates, SslProtocols.Tls12, true);
_sslStream.Write(someData, 0, someData.Length);
Однако я получаю исключение:


System.Security.Authentication.AuthenticationException: не удалось выполнить вызов SSPI
, см. внутреннее исключение. --->
System.ComponentModel.Win32Exception: произошла неизвестная ошибка при
обработке сертификата

--- Конец внутренней трассировки стека исключений

at System.Net.Security.SslState.CheckThrow(Boolean authSucessCheck)
at System.Net.Security.SslStream.Write(Byte[] буфер, смещение Int32, счетчик Int32)


Я включил ведение журнала SChannel и нашел это в журнале событий Windows:


Удаленный сервер запросил аутентификацию SSL-клиента, но
подходящего сертификата клиента найти не удалось. Будет предпринята попытка анонимного подключения
.


Затем я включил ведение журнала System.Net, как описано здесь, и получил этот журнал (я удалил из него некоторые данные сертификата). Похоже, что с сертификатом клиента все в порядке, но по какой-то причине в журнале указано «Удаленный сертификат: null», хотя с удаленного сервера явно отправлены некоторые данные, которые очень похожи на сертификат. И в самом конце журнала написано, что возвращен код=CertUnknown. Я понятия не имею, в чем может быть проблема (сертификат удаленного сервера? Мой код? Настройки удаленного/локального сервера?) и буду признателен за любую помощь.

Примечание:
Если я изменю свой код на использование SSL 3, указав SslProtocols.Ssl3 вместо SslProtocols.Tls12, все будет работать нормально. Но мне действительно нужно использовать TLS, потому что именно этого просит владелец удаленного сервера.

Подробнее здесь: https://stackoverflow.com/questions/333 ... ertificate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»