2011-02-15 6 views
2

J'essaie d'énumérer les certificats d'Azure dans un rôle Web (exécuté sur le v1.3 Azure SDK Dev Fabric) mais aucun certificat n'est renvoyé lorsque j'utilise le code suivant. Il est important de noter, cependant, que le code fonctionne bien lorsqu'il est exécuté à partir d'un programme de console:Problème de certificat (lié à la sécurité?!?)

private static void EnumCerts() 
{ 
    var selectedCerts = new X509Certificate2Collection(); 

    var store = new X509Store(
     StoreName.My, StoreLocation.CurrentUser); 

    try 
    { 
     store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); 

     foreach (X509Certificate2 cert in store.Certificates) 
      Console.WriteLine(cert.Subject); 
    } 
    finally 
    { 
     store.Close(); 
    } 
} 

Mon hypothèse de travail est que cela est dû à un problème de sécurité. Mon rôle Web s'exécute avec Elevated Trust, mais je suppose que les instances Web IIS ne le sont pas.

Dans les deux cas je ne sais pas comment résoudre le problème, de sorte que toute aide serait grandement apprécié ...

Répondre

0

J'ai fini par résoudre le problème en intégrant le certificat dans mon code de service puis lecture de la ressource:

using System.IO; 
using System.Reflection; 
using System.Security.Cryptography.X509Certificates; 

namespace AcsTest.Shared 
{ 
    public static class CertHelper 
    { 
     public static X509Certificate2 GetCertFromManifest(
      Assembly assembly, string certName, string password) 
     { 
      byte[] bytes; 

      using (var stream = assembly. 
       GetManifestResourceStream(certName)) 
      { 
       bytes = new BinaryReader(stream). 
        ReadBytes((int)stream.Length); 
      } 

      return new X509Certificate2(bytes, password, 
       X509KeyStorageFlags.MachineKeySet); 
     } 
    } 
} 

L'idée clé est que je avais besoin de stocker un mot de passe dans mon service à charger le CERT du magasin de certificat ainsi je ne gagnais aucun avantage de sécurité en le gardant dans le magasin.

0

magasin le certificat X509 dans le LocalMachine au lieu de CurrentUser. CurrentUser pour un processus IIS s'exécute dans le contexte de l'utilisateur IIS auquel vous n'avez probablement pas accès. En outre, vous souhaitez vous assurer que vous avez correctement importé le certificat du côté Azure dans le magasin de certificats en procédant à l'accès distant et à la vérification.

+0

Merci pour la réponse rapide! J'ai eu l'impression qu'Azure ne stocke que des certificats dans le magasin CurrentUser (comme décrit dans http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure- vms.aspx). Je vais télécharger un site expérimental pour tester votre théorie –

+0

Oh, je pourrais me tenir corrigé alors. – Igorek

0

Vous devez effectuer une commande à distance (RDP) dans le rôle et vérifier le (s) magasin (s). Honnêtement, je ne sais pas où le portail Azure télécharge des certs, mais je pensais que c'était CurrentUser (que je pense que IIS fonctionne également).

Vous pouvez également énumérer les certificats via l'API Service Management, qui peut ou non fonctionner pour votre solution. http://msdn.microsoft.com/en-us/library/ee795178.aspx

Questions connexes