ASP.NET Request.ClientCertificate возвращается пустой в IIS 7 - PullRequest
6 голосов
/ 15 июня 2011

Я переносу веб-приложение с сервера IIS 6 на сервер IIS 7, и у меня возникают некоторые проблемы с получением сертификата клиента.

Часть кода, которую я использую, выглядит следующим образом:

        HttpClientCertificate cert = Request.ClientCertificate;

        if (cert.IsPresent)
        {
            ...
        }

На сервере IIS 6 cert.IsPresent всегда имеет значение true. Однако в окне IIS 7 оно всегда ложно. Оба теста были сделаны с IE 8 с того же компьютера. Единственным изменением был URL-адрес сервера, поэтому клиент должен быть правильно настроен.

Я не получаю никаких ошибок соединения SSL (я захожу на страницу через https), и я установил Настройки SSL -> Сертификаты клиента: Принять (аналогично конфигурации IIS 6).

Я прошел и настроил сервер IIS 7 настолько близко, насколько мог, к серверу IIS 6, но я все еще не получил сертификат.

Есть ли другие области, на которые мне нужно обратить внимание при настройке?

Кроме того, если я установил Сертификаты клиента: Обязательно, я получаю ошибку 403.7 в окне IIS 7. Я не знаю, является ли это симптомом, но на всякий случай информация полезна ...

Ответы [ 3 ]

4 голосов
/ 20 июня 2011

В основном это сводится к тому, что клиент не может предоставить клиентский сертификат.Вот почему вы получаете ошибку 403.7, когда вам это требуется.Я считаю, что вам нужно это:

http://blogs.msdn.com/b/puneetgupta/archive/2009/08/03/where-is-the-client-certificates-ui-in-iis-7-0.aspx

Пожалуйста, дайте мне знать, если это поможет.

/ Папа

3 голосов
/ 04 сентября 2012

Я столкнулся с этим вопросом, когда искал дополнительную информацию о том, как получить сертификаты в IIS 7 против IIS 6. Я вижу, что решение @ whosrdaddy сработало для asker.Есть еще кое-что, что мне пришлось выследить.

Одно из различий между IIS 6 и IIS 7 заключается в том, что IIS 6 имеет вкладку «Безопасность каталога» в конфигурации каждого веб-сайта.Чтобы сделать запросы веб-сервера на сертификаты в IIS 7, необходимо щелкнуть функцию «Настройки SSL» для веб-сайта или виртуального каталога, который вы настраиваете, чтобы увидеть параметр «Сертификаты клиента:»: Игнорировать, Принять или Требовать.

Убедитесь, что для этого параметра не установлено значение "Игнорировать", иначе вы никогда не получите сертификаты для работы!

0 голосов
/ 10 апреля 2014

IsPresent == false может быть вызвано несколькими причинами, связанными с сервером и клиентом.Мы разбираемся с каждым из них на пути к окончательному исправлению этих ошибок, и я подробно опишу каждое из них ...

Проблема сервера № 1 - Переданный сертификат клиента имеет 1 или более путей сертификации, которые НЕ существуют на сервере,Откройте сертификат, перейдите на путь сертификации (вкладка) и убедитесь, что все корневые органы находятся в доверенных корневых центрах сертификации SERVERS.Обратите внимание, что вам НЕ нужно устанавливать сертификат на сервере, а просто открывать ключи корневых органов в разделе Сертификаты (локальный компьютер) \ Доверенные корневые центры сертификации.

Проблемы с сервером # 2 (ранее упомянутое решение) - В IIS для сайта убедитесь, что в параметрах SSL установлено значение Принять ИЛИ Требовать (никогда не игнорировать).Преимущество использования Require заключается в том, что в журналах IIS отображается ошибка 403 7, при которой Accept просто получит IsPresent == false, но с кодом HTTP 200.

Client Issue # 1 - То же, что серверпроблема № 1, нужно доверять этим органам!

Клиент Проблема № 2 - у вас есть доверенные корневые полномочия, но НЕ закрытый ключ для самого сертификата.Убедитесь, что вы установили pfx (закрытый ключ) в хранилище сертификатов, а не в открытый ключ (.cer).Вы также можете проверить, есть ли у вас закрытый ключ, дважды щелкнув по сертификату в хранилище сертификатов, и на вкладке «Общие» вы увидите сообщение, содержащее столько же слов.

Client Issue # 3 - Сертификат помещен вне то место.Вероятно, лучше всего разместить свой сертификат в Сертификаты (Локальный компьютер) \ Личные \ Сертификаты, а не (текущий пользователь).Это сделает сертификат доступным для обработки учетных записей, на которых выполняется ваш код, и которые на самом деле нуждаются в доступе к нему.

Клиентская проблема № 4 - щелкните сертификат правой кнопкой мыши (в хранилище не файл .cer) ->Все задачи -> Управление личными ключами ... и убедитесь, что учетная запись процесса, выполняющая ваш код, имеет разрешение «Чтение».Быстрая проверка этого (но не рекомендуется для производственного использования) заключается в добавлении «Все» как прочитано, чтобы увидеть, если это ваша проблема.

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