2009-10-12 4 views
2

J'ai une application de service Windows .NET 2.0 écrite en C# qui accède à un service Web non-soap via SSL avec HttpWebRequest. Mon service Windows s'exécute sous le compte SERVICE RÉSEAU.Utilisation du magasin de certificats "Compte de service" avec .NET 2.0 HttpWebRequest

Je peux faire fonctionner le protocole SSL en émettant un certificat au serveur Web auquel mon service Windows parle depuis une autorité de certification, puis en installant le certificat de l'autorité de certification dans le magasin racine Local Machine \ trusted. Ce que je voudrais faire est d'installer le certificat de l'autorité de certification dans le magasin de certificats racine de confiance "compte de service" au lieu du magasin "machine locale", et de le faire "juste travailler". En d'autres termes, il semble que l'authentification SSL utilisée par le framework .net soit codée en dur pour vérifier le magasin de l'utilisateur actuel, et le magasin local pour les racines approuvées lors de la validation d'un certificat SSL, mais existe-t-il un moyen propre? pour l'obtenir pour vérifier le magasin "compte de service" au lieu de (ou en plus de) les autres magasins? La seule solution que je peux trouver est de substituer le ServicePointManager.ServerCertificateValidationCallback, puis P/Invoke à l'API Crypto pour ouvrir le magasin de certificats "service account" dans Win32, et rechercher manuellement la racine dans là. Je préférerais ne pas le faire, car il semblerait que ce soit une pénalité de performance assez importante, en attendant l'échec de 2 magasins de cert que je n'ai pas l'intention d'utiliser de toute façon.

Peut-être, je prends entièrement la mauvaise approche ici, mais il semble vraiment que je manque un moyen simple de résoudre mon problème.

Répondre

1

Si votre code contrôle le serveur auquel il est en train de parler, alors pourquoi ne pas simplement retourner "true" à partir de CertValidationCallback? Ce n'est pas comme si le CERT du serveur changeait chaque fois que vous faites une demande?

À moins que vous ayez vraiment besoin du système pour vérifier également d'autres choses liées au cert, par exemple CRL, expiration, etc., vous pouvez simplement le faire fonctionner en implémentant un rappel de validation de cert personnalisé.

Si vous souhaitez vraiment installer le certificat dans le contexte a/c de NETWORK_SERVICE, Microsoft vous propose des outils pour vous aider à le faire.

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

bonne chance!

+0

le deuxième lien est cassé –

Questions connexes