Рейтинг:0

Взаимная проверка подлинности (клиент WCF, подключающийся к службе SOAP) не работает с одним сертификатом клиента, но работает с другим (но оба доверены на стороне сервера)

флаг hr

Настройка: клиентское приложение .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 решает не предоставлять его, либо служба не может его принять. Но что может быть другим/отсутствующим?

флаг hr
Верно, но что может сделать сертификат несовместимым или непризнанным, если тот же сертификат успешно работает для аутентификации сервера в другой несвязанной службе?
флаг hr
Я думаю, что здесь могут быть применены № 1 и № 2 - я проверю. Срок действия сертификата не истек, поэтому не № 3. Согласно сообщению, ошибка возникает во время рукопожатия между клиентом WCF и службой SOAP, поэтому здесь нет веб-страниц.
Steeeve avatar
флаг fr
Просто предположение: вы проверили, что учетная запись пользователя клиента имеет доступ для чтения к закрытому ключу сертификата A?
флаг hr
Спасибо @Steeeve, но разрешения на чтение закрытых ключей сертификатов A и B идентичны, и они находятся в одной и той же папке магазина Windows.
флаг cn
Захват пакета на клиенте может подтвердить наличие сертификата. Также включите и проверьте журнал событий Windows CAPI.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.