2010-01-20 4 views
7

Sto tentando di utilizzare un X509Certificate all'interno di un servizio Web ASP.NET all'interno di Rackspace Cloud. Ho la sensazione che i certificati archiviati sui nodi del cloud possano causare problemi. Ho anche una domanda relativa a questo con l'eccezione che sto ricevendo in SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C#Posso utilizzare un X509Certificate2 in ASP.NET senza utilizzare un archivio certificati?

Nell'ambito del progetto APN-taglienti stavo usando il seguente codice:

certificate = new X509Certificate2(p12File) 

Tuttavia ho ricevuto un'eccezione e modificare il codice a quanto segue risolto l'eccezione X509Certificate2. Il nuovo codice è il seguente:

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

Vorrei sapere se posso usare un X509Certificate2 all'interno di ASP.NET senza utilizzare un archivio certificati? Gli archivi di certificati potrebbero causare problemi con i nodi Cloud di Rackspace?

Aggiornamento n. 1 Spazio su racks indica che l'accesso all'archivio del certificato della macchina locale non è consentito. C'è un altro modo per bypassare l'utilizzo dell'archivio certificati? Forse usando una libreria di terze parti?

risposta

4

La ragione per il primo costruttore non funziona è che ASP.NET non carica l'archivio dei profili utente, che è il negozio di default se non si specifica un percorso di archiviazione utilizzando X509KeyStorageFlags. Tuttavia, l'archivio macchine viene sempre caricato da ASP.NET, motivo per cui il secondo costruttore funziona.

Suppongo che si intenda utilizzare la chiave privata sul certificato per la crittografia o la creazione di firme digitali (hashing), nel qual caso non è possibile evitare l'uso di un archivio certificati poiché è possibile accedere alle chiavi private solo a livello di programmazione da certificati importati e non direttamente da blob o file.

Non penso che l'archivio certificati venga utilizzato se i dati del certificato contengono solo la chiave pubblica (poiché non ci sono dati sensibili da proteggere) - Ho notato che ho solo bisogno di specificare l'archivio delle macchine quando intendo lavorare con certificati che contengono una chiave privata.

Non riesco a commentare la situazione di Rackspace - potrebbero esserci problemi con l'importazione di certificati nel codice in esecuzione in un ambiente parzialmente affidabile, poiché il caricamento di un contenitore di chiavi private richiede autorizzazioni specifiche che potrebbero non essere concesse all'assembly.

+0

Ok, grazie. Presumo che il certificato contenga la chiave privata poiché viene utilizzata per il servizio di notifica push di Apple iPhone. Potrebbe fornire maggiori dettagli riguardo "potrebbero esserci problemi con l'importazione di certificati nel codice in esecuzione in un ambiente parzialmente attendibile, in quanto il caricamento di un contenitore di chiavi private richiede autorizzazioni specifiche che potrebbero non essere concesse all'assembly."? – Luke

+1

Inoltre, sto eseguendo il codice sul mio server sviluppatore utilizzando lo stesso file di fiducia medio modificato che Rackspace utilizza nella parte inferiore di http://cloudsites.rackspacecloud.com/index.php/Overview_of_modified_Medium_Trust Non ricevo alcuna eccezione sul mio dev. server. – Luke

1

Ho importato un X509Certificate2 da un file e avere sia la chiave privata e la chiave pubblica disponibile utilizzando questo codice:

  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); 

La mia esperienza è che la chiave per avere che il lavoro era il X509KeyStorageFlags.Exportable. Senza quello, non potrei accedere alla chiave privata.