Передача клиентского сертификата работает только на моем компьютере

У меня есть веб-служба, которая защищена требованием от стороннего приложения-потребителя передавать сертификат клиента. Я установил сертификат на предоставляющую веб-службу в производстве и на клиенте. В настоящее время этот процесс отлично работает для других клиентов с аналогичной настройкой. Текущая версия написана на .NET 3.5 и отлично работает на моей машине разработки под cassini (и работает автономно), но отказывается работать на моей производственной машине с тем же кодом и настройкой сертификата. Я подтвердил, что веб-служба поставщика принимает сертификат, установленный на клиенте, через браузер, но когда сертификат добавляется к вызову веб-службы программно, я получаю 403, доступ запрещен. Я вывожу отпечаток сертификата, добавленного к вызову, до того, как он сделает запрос к защищенному веб-сервису, и это действительно правильный прикрепленный сертификат. Я думаю, что где-то по ходу дела у него нет доступа к закрытому ключу сертификата.

Любые идеи?

Примечание. Я предоставил процессу IIS доступ к соответствующим каталогам ~ / crypto.

Это C # и .NET 3.5


person Chris Ballance    schedule 27.10.2008    source источник


Ответы (3)


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

Тем не менее, я буду продолжать следить за этим вопросом, поскольку знаю, что выдача себя за другое лицо - это не волшебная палочка, и что в этом сценарии возникнут проблемы, связанные с этим.

person ZombieSheep    schedule 27.10.2008
comment
Ваш пост направил меня в правильном направлении. Спасибо, ZombieSheep! - person Chris Ballance; 29.10.2008

Есть явная причина, по которой это не сработало на моей машине. При запуске в Visual Studio он работает с моими учетными данными, которые использовались для установки сертификата. Таким образом автоматически получает разрешение на доступ к хранилищу закрытых ключей на машине. Однако при работе вне cassini (в среде IDE) процесс IIS не имел разрешений на доступ к хранилищу закрытых ключей.

Временное решение: запустите домен приложения как локальную систему. Плохо для безопасности, но он заставляет приложение работать (хотя и с ограничениями), пока я не смогу найти более постоянное решение.

person Chris Ballance    schedule 29.10.2008

Вы можете просто наклеить эту наклейку на свою программу и закончить ее:

alt text

person T.E.D.    schedule 27.10.2008
comment
Если бы я мог запустить эту машину в производство, у меня определенно было бы решение! - person Chris Ballance; 27.10.2008