403.7 проблема проверки подлинности сертификата клиента SSL IIS 7.5

Я тестирую веб-службу с внешним партнером, используя 2-сторонний SSL в IIS 7.5. Я требую SSL, требуя клиентского сертификата и используя сопоставление один к одному для аутентификации в учетной записи домена. Я настроил все, и он отлично работает в нашей сети (я могу предоставить сертификат клиента, пройти аутентификацию и вызвать службу из браузера и тестовой проводки). Из-за пределов нашей сети (в большинстве случаев, см. Ниже), я получаю ошибка 403.7. Я прошел через машину уровень хранения сертификатов и убедитесь, что сертификаты и CAs являются доверенными. Вот что странно. Я получил сертификат типа I для тестирования из дома (и получил 403.7, как и наш предполагаемый партнер). Поэтому я настраиваю Fiddler для отладки SSL и отправки моего сертификата, и это работает по какой-то причине. Я настроил тестовый жгут, чтобы пройти тот же сертификат, и получил 403.7. Я тестирую в своем браузере (IE 9), не получаю приглашение для сертификата клиента и получаю 403.7.
Любая помощь приветствуется. Билл!--4-->

2 ответов


последний раз, когда я проверял, IIS использовал повторное согласование (по умолчанию) для получения сертификата клиента: есть первое рукопожатие, когда сервер не запрашивает сертификат клиента, а затем другое рукопожатие (зашифрованное на этот раз), когда сервер запрашивает сертификат (через TLS CertificateRequest сообщение). Это помешает вам увидеть что-либо из Wireshark, если вы не настроите его использовать закрытый ключ сервера и расшифровать трафик (обратите внимание, что это работает только с некоторыми наборами шифров).

один из способов увидеть согласование клиент-сертификат-настроить IIS для использования начального согласования сертификата клиента, используя netsh и clientcertnegotiation=true (это о нач переговоров). По крайней мере CertificateRequest и сертификат будет отправлен в clear во время рукопожатия, поэтому вы сможете увидеть это с Wireshark. Если клиент не отправляет сертификат на сервер в ответ на CertificateRequest, вы все равно увидите пустой Certificate сообщение от клиента.

если вы не экспортируете закрытый ключ с сертификатом для использования с Fiddler или любым другим клиентом, нет никаких шансов, что он сможет использовать сертификат. В лучшем случае он может попытаться отправить сертификат, но рукопожатие не удастся (так как CertificateVerify сообщение должно быть подписано личным ключом клиента).

Я думаю, вы можете столкнуться с проблемой в результате:

  • не представление сертификата принимается сервером (это фактически необязательно),
  • представление недопустимого сертификата приводит к сбою и вызывает этот код состояния 403.7 (многие серверы и стеки SSL/TLS реализуют это как фатальную ошибку, но спецификация TLS не сказать, что unsupported_certificate, certificate_revoked, certificate_expired, certificate_unknown должно быть фатальным, так что это на усмотрение сервера).

используете ли вы одну и ту же физическую машину для тестирования как сетевых, так и внешних сетевых подключений? Если нет, вы уверены, что клиент внешней сети имеет доступ к закрытому ключу?

Я не настраивал аутентификацию клиента Fiddler раньше. Считывает ли он сертификат клиента и ключ из стандартных хранилищ сертификатов? Он читал непосредственно из pkcs12 из?

еще одна вещь, которая может быть полезна, - это проверка рукопожатия TLS в WireShark. В частности, проверьте сообщение "запрос сертификата" сервера, поскольку данные здесь указывают клиенту (IE9), какие сертификаты клиента он должен отображать в приглашении. Сравните это для внутренних и внешних соединений.