Код: Выделить всё
_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
Мобильная версия