Сертификат клиента HttpWebRequest не работает в IIS

Я пытаюсь создать приложение WCF, размещенное в IIS. Это приложение WCF вызовет сторонний веб-сайт для загрузки CSV-файла. Сторонний веб-сайт предоставил сертификат для аутентификации вызова WCF. Моя среда разработки,

-ОС: Windows 2008R2 -Инструменты: Visual Studio 2010 (.Net 4.x)

Во время разработки у меня нет проблем с выполнением вызовов с использованием HttpWebRequest, но после того, как я развернул то же самое в IIS, это дает мне следующую ошибку, даже если я запускаю Visual Studio 2010, используя IIS в качестве сервера разработки,

"\r\nИнформация о сертификате не соответствует логину, в соединении отказано."

Сертификат при установке требует пароль. Я установил его в «Моя учетная запись пользователя» и «Учетная запись компьютера». Он также установлен в IE. Во всех установках он устанавливается в "Доверенные корневые центры сертификации". Но все же я получаю сообщение об ошибке. Я дал свой фрагмент кода ниже,

        X509Certificate2 xc = new X509Certificate2(CertPath, GetCertificatePassword());

        HttpWebRequest wc = (HttpWebRequest)WebRequest.Create(QryUrl);
        wc.ClientCertificates.Add(xc);
        Stream str = wc.GetResponse().GetResponseStream();

Если кто-то может предоставить мне какую-либо информацию, было бы неплохо, еще раз спасибо,


person Suvro    schedule 21.02.2011    source источник


Ответы (1)


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

Если вы используете оснастку «Сертификаты MMC», выберите сертификат, а затем щелкните правой кнопкой мыши -> Все задачи -> Управление закрытыми ключами, и оттуда, если вы не видите учетную запись пользователя IIS в списке, вы можете добавить ее туда, нажав «Добавить», а затем в появившемся диалоговом окне, если, например, вы запускаете IIS в качестве сетевой службы, введите «сетевая служба» (с пробелом) и нажмите «Проверить имена», а затем, когда вы вернетесь к «Управлению закрытыми ключами», вы можете установить безопасность доступ.

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

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

Кроме того, если это клиентский сертификат с закрытым ключом, он почти наверняка должен находиться в личном хранилище, а не в доверенных корневых центрах сертификации. Поэтому попробуйте «Локальный компьютер», «Личный» и предоставьте доступ к закрытому ключу учетной записи, под которой работает IIS (или приложение).

person Jim Flood    schedule 22.02.2011
comment
Вы правы, я только что изменил идентификатор пула приложений IIS на системную учетную запись с ролью локального администратора. И тогда я смог получить доступ к хранилищу сертификатов. - person Suvro; 17.04.2011
comment
@Suvro: вместо изменения идентификатора пула вы можете установить разрешения доверия для своего сертификата (через MMC) на IIS AppPool\DefaultAppPool. И так же должно работать... - person Robert Koritnik; 14.05.2012