Использование хранилища сертификатов «Учетная запись службы» в .NET 2.0 HttpWebRequest - PullRequest
3 голосов
/ 13 октября 2009

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

Я могу заставить SSL работать, выдав сертификат веб-серверу, с которым моя служба Windows обращается к ЦС, затем установив сертификат ЦС на локальный компьютер.\ доверенное корневое хранилище.

Я хотел бы установить сертификат ЦС в хранилище доверенного корневого сертификата «учетная запись службы» вместо хранилища «на локальной машине» и иметь это «просто».work. "

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

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

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

1 Ответ

1 голос
/ 13 октября 2009

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

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

Если вы действительно хотите установить сертификат в контексте NETWORK_SERVICE a / c, то для этого есть инструменты от 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

удачи!

...