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), какие сертификаты клиента он должен отображать в приглашении. Сравните это для внутренних и внешних соединений.