sslStream.AuthenticateAsClientAsync не принимает сертификат клиента - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь использовать SslStream для установления TLS подключения к серверу.
Когда я не предоставляю сертификат, все работает как положено.

Однако, когда я пытаюсь использовать самозаверяющий сертификат клиента на том же сервере, он не работает.

  • Когда я использую файл cer (сертификат без закрытого ключа), сертификат не отправляется (пакет сертификата имеет длину сертификата 0).

  • Когда я пытаюсь использовать файл pfx, который содержит сертификат, закрытый ключ и ca сертификат, я получаю сообщение об ошибке

«Учетные данные, предоставленные для пакета, не были распознаны»

Я попытался установить pfx и сертификат сервера в Windows, но это не помогло.

Трассировка стека исключений:

в System.Net.Security.SslState.InternalEndProcessAuthentication (LazyAsyncResult lazyResult)
в System.Net.Security.SslState.EndProcessAuthentication (IAsyncResult результат)
в System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, действие 1 endAction, Task 1 обещание, логическое значение requiresSynchronization)

Я попытался загрузить pfx с помощью:

System.Security.Cryptography.X509Certificates.X509Certificate2(path, password);

И

System.Security.Cryptography.X509Certificates.X509Certificate2Collection collection = 
    new System.Security.Cryptography.X509Certificates.X509Certificate2Collection();

collection.Import(path, password, System.Security.Cryptography.X509Certificates.X509KeyStorageFlags.PersistKeySet);

Оба приводят к одним и тем же ошибкам.
- CheckCertificateRevocation имеет значение false.
- Включенные протоколы установлены на Tls | Tls11 | Tls12
- Целевой хост имеет имя DNS удаленного сервера.

Что я делаю не так?

...