Сертификат клиента HttpWebRequest не работает в IIS - PullRequest
2 голосов
/ 21 февраля 2011

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

-OS: 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();

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

1 Ответ

1 голос
/ 22 февраля 2011

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

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

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

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

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

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