Domanda

Sto cercando di utilizzare la classe HttpListener in un'applicazione C # per fare in modo che un mini server web serva contenuto su SSL. Per fare questo ho bisogno di usare lo strumento httpcfg. Ho un file .pfx con la mia coppia di chiavi pubblica e privata. Se importare manualmente questa coppia di chiavi utilizzando mmc nell'archivio macchine locale, tutto funziona correttamente. Tuttavia, se importare questa coppia di chiavi a livello di codice utilizzando la classe X509Store, non sono in grado di connettermi al mio mini webserver. Si noti che in entrambi i metodi il certificato viene importato nel MY Store 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.

Scavando un po 'più a fondo, noto che quando importi manualmente la coppia di chiavi, vedo apparire un nuovo file in C: \ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys , ma non appare quando eseguo l'importazione a livello di codice. In una nota correlata, quando elimino un certificato importato manualmente, non rimuove il file della chiave privata corrispondente dalla directory precedentemente menzionata.

Alla fine, la mia domanda è questa: quando aggiungo a livello di codice il certificato all'archivio, dove si trova la chiave privata e perché non è accessibile alla classe HttpListener (HttpApi)?

Nota che questa domanda è leggermente correlata ma non credo che l'autorizzazione sia il problema poiché tutto questo viene fatto come lo stesso utente di Windows: Come impostare l'autorizzazione di lettura sul file della chiave privata del certificato X.509 da .NET

È stato utile?

Soluzione

Ok, l'ho capito. Ha avuto a che fare con i parametri di archiviazione delle chiavi per l'oggetto certificato. Per chiunque incontri questo problema, assicurati di costruire gli oggetti X509Certificate2 che stai aggiungendo al negozio usando X509KeyStorageFlags.PersistKeySet e X509KeyStorageFlags.MachineKeySet flag. Ciò costringerà la chiave privata a persistere nella posizione del set di chiavi della macchina richiesta da HttpApi ( HttpListener lo avvolge).

Altri suggerimenti

È un SSL a 2 vie? In tal caso, hai inviato un file di richiesta certificato SSL generato sul tuo computer? Questo file di richiesta di certificato verrà utilizzato per creare SSL e formano insieme una coppia di chiavi private pubbliche.

Hai anche provato ad assegnare l'autorizzazione cert per l'account utente utilizzato per eseguire l'app Web? Puoi farlo utilizzando lo strumento Microsoft WSE 3.0.

Non esattamente la risposta alla tua domanda, ma qui come riferimento per gli altri che seguono questa strada:

Qui è un collegamento a una chat MS che fornisce un esempio Codice C # per fare ciò che fa httpcfg, eliminando così la necessità dello strumento per la distribuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top