2014-05-23 13 views
17

Quando stavo utilizzando il ruolo web stavo caricando il certificato nel portale azzurro e sono riuscito a vederlo. Ora sono passato al sito Web in azzurro e ho caricato il certificato nel portale di gestione azzurro ma il mio codice non lo vede affatto.Accesso ai certificati caricati in siti Web blu

Esistono alcune configurazioni che è necessario eseguire o un altro modo per accedere ai certificati caricati nei siti Web blu.

Ecco come sto tentando di accedere al certificato caricato.

private List<string> GetAvailableCertificatesFromStore() 
{ 
    var list = new List<string>(); 
    var store = new X509Store(StoreName.My,StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); 

    try 
    { 
     foreach (var cert in store.Certificates) 
     { 
      // todo: add friendly name 
      list.Add(string.Format("{0}", cert.Subject)); 
     } 
    } 
    finally 
    { 
     store.Close(); 
    } 

    return list; 
} 

risposta

11

AGGIORNAMENTO - 23 luglio 2015: Questa risposta è ormai obsoleta (E 'stato corretto nel momento in cui è stato fornito però). Per favore vedi la risposta di S Armstrong qui sotto.

Le cose funzionano diversamente in Azure Cloud Services (Web/Worker Roles) e Azure Websites. Nei servizi cloud di Azure quando si carica un certificato tramite il portale di gestione e si specifica l'identificazione personale e l'ubicazione del certificato nelle proprietà del proprio ruolo, quando il ruolo viene distribuito in una macchina virtuale, il controller fabric responsabile installa automaticamente tali certificati automaticamente. Questo è il motivo per cui il codice sopra funziona in un ruolo web.

Nel sito Web, è necessario farlo da soli. Sfortunatamente a causa delle restrizioni di sicurezza in un sito Web di Azure, non è possibile installare un certificato nell'archivio certificati. Per lavorare con i certificati, è necessario includere il file PFX del certificato insieme al codice e lavorare con quel file di certificato. Non è possibile installare il certificato nell'archivio certificati.

In qualsiasi piccolo lavoro che ho fatto con il sito Web e i certificati di Azure, ho trovato che il certificato funziona solo se il file PFX è incluso nella cartella AppData. Inoltre potresti incorrere in errori come CryptographicException: The system cannot find the file specified. Se riscontri questo errore, potresti trovare utile questo post sul blog: http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/

+0

Per quanto mi riguarda posso dire si è corretta al 100%. I certificati caricati tramite il portale non vengono nemmeno installati in un negozio. Sembrano essere caricati in memoria attraverso altri mezzi durante l'avvio di IIS. –

+2

Questa risposta non è aggiornata. Per favore vedi la risposta di S.Armstrong sotto –

59

L'utilizzo dei certificati in un sito Web di Azure funziona in modo diverso rispetto a come avviene in una copia locale di IIS o anche quando si esegue un sito Web in modalità di debug da Visual Studio. In breve, il sito web non ha accesso a un negozio di certificati nel senso tradizionale del termine ... è tutto fatto in memoria.

In primo luogo, una volta caricato il certificato tramite il portale di Azure, è necessario aggiungere un'appetting (anche tramite il portale) denominata WEBSITE_LOAD_CERTIFICATES e impostare il valore per questo sull'identificazione personale del certificato caricato. Questo può essere un elenco separato da virgole di più impronte digitali se lo si desidera, o anche * caricare tutti i certificati caricati. Presumo che questo costringa i certificati a essere caricati in memoria.

Per poi caricare il certificato, è possibile effettuare le seguenti operazioni:

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

var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false); 

Cambiare il 'falso' a 'vero' se si vuole garantire il certificato è valido.

ho trovato queste informazioni qui, il che spiega molto meglio di quanto ho: http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

+0

Grazie! Questo ha funzionato come un fascino! –

+1

Accidenti. Ho trascorso 3 ore. Il mio nome parametro era diverso (non WEBSITE_LOAD_CERTIFICATES).Grazie –

+3

Dopo aver trascorso giorni, ho scoperto che il problema è StoreLocation.CurrentUser not StoreLocation.LocalMachine! – omeralper