Настройка: клиентское приложение .NET (4.6) подключается к удаленной службе SOAP через HTTPS. Удаленная служба может быть настроена так, чтобы она требовала сертификат клиента или нет.
То, что я ищу в качестве ответа, - это любое возможное объяснение того, почему сценарий № 2 терпит неудачу ... все следующие 3 сценария были протестированы с использованием точно такой же кодовой базы, только с изменением задействованных сертификатов и независимо от того, требовался ли клиентский сертификат оказание услуг.
Сценарий №1 — сертификат клиента не требуется
- клиент подключается нормально
Сценарий №2 — требуется сертификат клиента, используется сертификат А
- сертификат А установлен в Windows на стороне клиента (локальный компьютерный магазин)
- сертификат действителен, 2048 бит, без подстановочного знака, успешно использован для проверки подлинности сервера в другой несвязанной службе, выдан центром сертификации GoDaddy Secure — G2
- сертификат передается удаленной стороне, которая, похоже, знает, что делает
- когда клиент пытается запросить, происходит сбой рукопожатия. На стороне клиента исключение .NET: «Запрос был прерван: не удалось создать безопасный канал SSL/TLS». На стороне сервера ошибка "клиенту не удалось предоставить сертификат".
Сценарий №3 — требуется сертификат клиента, используется сертификат B
- все точно так же, как # 2, за исключением того, что используется другой сертификат клиента (B)
- сертификат действителен, 2048 бит, подстановочный знак, успешно использован для аутентификации сервера в другой несвязанной службе, выдан GeoTrust RSA CA 2018
- клиент подключается нормально
Из журналов видно, что и в сценарии № 2, и в сценарии № 3 клиент и сервер договариваются об использовании TLS 1.2.
После многократного запуска вышеуказанного, проверки всего, мой единственный вывод заключается в том, что сертификат A каким-то образом не совместим с настройкой - либо клиент .NET решает не предоставлять его, либо служба не может его принять. Но что может быть другим/отсутствующим?