403.7 Проблема аутентификации сертификата клиента IIS 7.5 SSL - PullRequest
7 голосов
/ 26 мая 2011

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

Ответы [ 2 ]

8 голосов
/ 26 мая 2011

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...