Использование хранилища сертификатов «Сервисная учетная запись» в .NET 2.0 HttpWebRequest

2

У меня есть приложение службы Windows.net 2.0, написанное на С#, которое обращается к веб-сервису без мыла через SSL с помощью HttpWebRequest. Моя служба Windows работает под учетной записью NETWORK SERVICE.

Я могу сделать работу SSL, выдав сертификат на веб-сервер, с которым работает служба Windows, из CA, а затем установил сертификат CA в хранилище корневого каталога Local Machine\trusted.

То, что я хотел бы сделать, - это установить сертификат CA в хранилище доверенных корневых сертификатов "service account" вместо хранилища "local machine" и выполнить эту "просто работу".

Другими словами, кажется, что аутентификация SSL, используемая инфраструктурой .net, жестко закодирована для проверки текущего хранилища пользователей и локального хранилища компьютеров для доверенных корней при проверке SSL-сертификата, но есть ли какой-либо чистый способ получить его, чтобы проверить "учетную запись службы" вместо (или в дополнение) к другим магазинам?

Единственное решение, которое я могу придумать, это переопределить ServicePointManager.ServerCertificateValidationCallback, а затем P/Invoke на Crypto API, чтобы открыть хранилище сертификатов "учетная запись службы" в Win32 и вручную искать там корневой каталог. Я бы предпочел не делать этого, так как это выглядело бы довольно большим штрафом за производительность, и пришлось ждать неудачи из 2 сертификационных магазинов, которые я вообще не намерен использовать.

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

Теги:
ssl
certificate
httpwebrequest

1 ответ

1

Если ваш код управляет сервером, с которым он разговаривает, тогда почему вы просто не возвращаете "истину" из CertValidationCallback? Это не так, как если бы серверный сертификат менялся каждый раз, когда вы делаете запрос?

Если вам действительно нужна система для проверки других вещей, связанных с сертификатом, например, CRL, истечения срока действия и т.д., вы можете просто заставить ее работать, выполнив обратный вызов проверки подлинности сертификата.

Если вы действительно хотите установить сертификат в контексте a/c NETWORK_SERVICE, тогда вам помогут инструменты Microsoft, которые помогут вам в этом.

http://support.microsoft.com/kb/901183 http://web.asu.edu/community/installing-client-certificate-windows-machine http://www.derkeiler.com/Newsgroups/microsoft.public.dotnet.security/2008-03/msg00011.html

Удачи!

  • 0
    вторая ссылка не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню