Question

J'essaie d'utiliser la classe HttpListener dans une application C # pour qu'un mini serveur Web serve le contenu via SSL. Pour ce faire, je dois utiliser l'outil httpcfg. J'ai un fichier .pfx avec ma paire de clés publique et privée. Si j'importe cette paire de clés manuellement à l'aide de mmc dans le magasin de l'ordinateur local, tout fonctionne correctement. Toutefois, si j'importe cette paire de clés par programme à l'aide de la classe X509Store, je ne peux pas me connecter à mon mini-serveur Web. Notez que dans les deux méthodes, le certificat est importé dans le magasin MY de LocalMachine. Bizarrement, je peux visualiser le certificat au format mmc une fois que je l’ai importé par programme et lorsque je le visualise, l’interface utilisateur indique qu’une clé privée est également disponible pour ce certificat.

En creusant un peu plus loin, je remarque que, lorsque j'importe manuellement la paire de clés, un nouveau fichier apparaît dans C: \ Documents and Settings \ Tous les utilisateurs \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys , mais l'un n'apparaît pas lorsque j'importe par programme. Sur un plan connexe, lorsque je supprime un certificat importé manuellement, il ne supprime pas le fichier de clé privée correspondant du répertoire mentionné précédemment.

Finalement, ma question est la suivante: quand j’ajoute le certificat au programme par magasin, où est la clé privée stockée et pourquoi n’est-elle pas accessible à la classe HttpListener (HttpApi)?

Notez que cette question est légèrement liée, mais je ne pense pas que l’autorisation soit le problème car tout cela est fait par le même utilisateur Windows: Comment définir une autorisation de lecture sur le fichier de clé privée du certificat X.509 à partir de .NET

Était-ce utile?

La solution

Ok, je l'ai compris. Cela concernait les paramètres de stockage de clé pour l'objet de certificat. Si vous rencontrez ce problème, assurez-vous de créer les objets X509Certificate2 que vous ajoutez au magasin à l'aide de X509KeyStorageFlags.PersistKeySet et X509KeyStorageFlags.MachineKeySet drapeaux. Cela forcera la clé privée à persister dans l'emplacement du jeu de clés machine requis par HttpApi ( HttpListener encapsule ceci).

Autres conseils

S'agit-il d'un protocole SSL à 2 voies? Si c'est le cas, avez-vous envoyé un fichier de demande de certificat SSL généré sur votre ordinateur? Ce fichier de demande de certificat sera utilisé pour créer le protocole SSL. Ensemble, ils forment une paire de clés privées publiques.

Avez-vous également essayé d'attribuer l'autorisation de certification pour le compte d'utilisateur utilisé pour exécuter l'application Web? Pour ce faire, utilisez l’outil Microsoft WSE 3.0.

Ce n'est pas exactement la réponse à votre question, mais voici la référence des autres empruntant ce chemin:

Ici est un lien vers un chat MS qui donne un exemple. C # code pour faire ce que httpcfg fait, éliminant ainsi le besoin de l'outil lors du déploiement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top