Sto provando a utilizzare la classe HttpListener in un'applicazione C# per fare in modo che un mini server web serva il contenuto su SSL. Per fare questo ho bisogno di utilizzare lo strumento httpcfg. Ho un file .pfx con la mia coppia di chiavi pubbliche e private. Se impongo manualmente questa coppia di chiavi usando mmc nell'archivio locale, tutto funziona correttamente. Tuttavia, se imposto questa coppia di chiavi a livello di codice utilizzando la classe X509Store, non riesco a collegarmi al mio mini server web. Si noti che in entrambi i metodi il certificato viene importato nell'archivio MY in LocalMachine. Stranamente, sono in grado di visualizzare il certificato in mmc dopo averlo importato a livello di codice e quando lo visualizzo, l'interfaccia utente indica che è disponibile anche una chiave privata per questo certificato.Importazione certificato con chiave privata programmaticamente
Scavando un po 'più a fondo, mi accorgo che quando imposto manualmente la coppia di chiavi, posso vedere un nuovo file visualizzato in C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
, ma uno non viene visualizzato durante l'importazione programmatica. In una nota correlata, quando elimino un certificato importato manualmente, non rimuove il file della chiave privata corrispondente dalla directory menzionata in precedenza.
In definitiva, la mia domanda è questa: quando aggiungo il certificato al negozio, dove viene archiviata la chiave privata e perché non è accessibile alla classe HttpListener (HttpApi)?
Si noti che questa domanda è un po 'legato, ma non credo che permissioning è il problema dal momento che questo è tutto stato fatto come lo stesso utente di Windows: How to set read permission on the private key file of X.509 certificate from .NET
Si prega di contrassegnare questa come risposta – Developer
Purtroppo devo aspettare 48 ore prima di poterlo fare a quel punto, probabilmente mi dimenticherò di farlo. :( – Jason
Ho perso circa 30 minuti cercando di capire perché "X509KeyStorageFlags.MachineKeySet & X509KeyStorageFlags.PersistKeySet" non funzionava. Ovviamente, dovrebbe essere "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet." Abbastanza ovvio, nel caso in cui qualcun altro prova la stessa stupida cosa che ho fatto. –