2010-01-20 4 views
7

J'essaie d'utiliser un certificat X509 dans un service Web ASP.NET dans le Cloud Rackspace. J'ai l'impression que les magasins de certificats sur les nœuds de nuage peuvent causer des problèmes. J'ai aussi une question liée à ce à l'exception que je reçois, j'utilisais le code suivant à SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C#Puis-je utiliser un X509Certificate2 dans ASP.NET sans utiliser de magasin de certificats?

Au sein du projet APNs-sharp:

certificate = new X509Certificate2(p12File) 

Cependant, je reçu une exception et la modification du code à ce qui suit résolu l'exception X509Certificate2. Le nouveau code est la suivante:

certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet); 

Je voudrais savoir si je peux utiliser un X509Certificate2 au sein de ASP.NET sans utiliser un magasin de certificats? Est-ce que les magasins de certificats causent des problèmes avec les nœuds Cloud Rackspace? Rackspace m'indique que l'accès au magasin de certificats de la machine locale n'est pas autorisé. Existe-t-il un autre moyen de contourner l'utilisation du magasin de certificats? Peut-être utiliser une bibliothèque tierce?

Répondre

4

La raison pour laquelle le premier constructeur ne fonctionne pas est que ASP.NET ne charge pas le magasin de profils utilisateur, qui est le magasin par défaut si vous ne spécifiez pas d'emplacement de stockage à l'aide de X509KeyStorageFlags. Cependant, le magasin de machines est toujours chargé par ASP.NET, ce qui explique pourquoi le second constructeur fonctionne. Je suppose que vous avez l'intention d'utiliser la clé privée sur le certificat pour le cryptage ou la création de signatures numériques (hachage), auquel cas vous ne pouvez pas éviter d'utiliser un magasin de certificats car les clés privées ne sont accessibles que par programmation certificats importés, et non directement à partir de blobs ou de fichiers.

Je ne pense pas que le magasin de certificats est utilisé si les données du certificat contiennent uniquement la clé publique (car il n'y a pas de données sensibles à protéger) - J'ai remarqué que je dois spécifier le magasin de la machine pour travailler avec des certificats qui contiennent une clé privée. Je ne peux pas commenter la situation Rackspace cependant - il peut y avoir des problèmes avec l'importation de certificats dans le code exécuté dans un environnement partiellement approuvé, car le chargement d'un conteneur de clé privée demande des autorisations spécifiques qui ne peuvent pas être accordées à votre assembly.

+0

Très bien, merci. Je suppose que le certificat contient la clé privée car il est utilisé pour le service de notification push Apple iPhone. Pourriez-vous fournir plus de détails concernant «l'importation de certificats dans un code exécuté dans un environnement partiellement approuvé peut poser des problèmes, car le chargement d'un conteneur de clé privée requiert des autorisations spécifiques qui peuvent ne pas être accordées à votre assembly»? – Luke

+1

En outre, je cours le code sur mon serveur de développement en utilisant le même fichier de confiance moyen modifié que Rackspace utilise au bas de http://cloudsites.rackspacecloud.com/index.php/Overview_of_modified_Medium_Trust Je ne reçois aucune exception sur mon dev. serveur. – Luke

1

J'ai importé un X509Certificate2 d'un fichier et à la fois la clé privée et la clé publique disponible en utilisant ce code:

  X509Certificate2 cert = new X509Certificate2(); 
      // Key Location: the physical file location (C:\cert.pfx) 
      // Key Password: the password for the certificate 
      cert.Import(keyLocation, keyPassword, X509KeyStorageFlags.Exportable); 

Mon expérience est que la clé de l'avoir été le travail X509KeyStorageFlags.Exportable. Sans cela, je ne pouvais pas accéder à la clé privée.

Questions connexes