Accesso ai certificati caricati in siti Web blu

Quando stavo usando il ruolo web stavo caricando il certificato nel portale azure e sono stato in grado di vederlo. Ora sono passato al sito web in azure e ho caricato il certificato nel portale di gestione azure ma il mio codice non lo vede affatto.

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

Ecco come sto cercando di accedere al certificato caricato.

private List GetAvailableCertificatesFromStore() { var list = new List(); 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; } 

AGGIORNAMENTO – 23 luglio 2015: questa risposta è ora obsoleta (era corretta al momento in cui è stata fornita però). Per favore vedi la risposta di S Armstrong qui sotto.

Le cose funzionano in modo diverso nei Azure Cloud Services (Web/Worker Roles) e nei 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, dovresti farlo da solo. Sfortunatamente a causa delle restrizioni di sicurezza in un sito Web di Azure, non è ansible 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 è ansible 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/

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 attraverso 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 caricare il tuo certificato, puoi fare quanto segue:

 var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false); 

Cambia il ‘falso’ in ‘vero’ se vuoi assicurarti che il certificato sia valido.

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