Я пытаюсь использовать 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 удаленного сервера.
Что я делаю не так?