2013-01-08 6 views
8

Sono perso in un intricato labirinto di certificati e chiavi private.Come creare un certificato da utilizzare con SslStream AuthenticateAsServer senza importare

Sto scrivendo un server in C#. Voglio che accetti le connessioni SSL. A scopo di test, voglio generare un certificato per "localhost" e usare quel certificato per il server. Idealmente non voglio inquinare il mio archivio certificati, quindi voglio solo un file, o file, sul disco che il codice C# può caricare per fornire il certificato.

Tutto ciò che ho provato (utilizzando gli approcci di libro di cucina suggeriti dalle ricerche web) mi dà "Le credenziali fornite al pacchetto non sono state riconosciute" o "La modalità server SSL deve utilizzare un certificato con la chiave privata associata".

C'è un modo per generare un certificato e una chiave privata e successivamente caricarli in un oggetto X509Certificate senza caricarli anche nell'archivio certificati del mio computer?

+0

hai davvero bisogno di questo certificato o vuoi semplicemente saltare cert. controllalo usando ?? – VladL

+0

Il server è un server web. Ho bisogno di collegarmi ad esso da un browser, usando il protocollo https. Quindi suppongo di aver bisogno del certificato. Sono consapevole che il certificato non sarà considerato attendibile, quindi l'utente del browser dovrà accettarlo come tale. –

risposta

12

Alla fine, mi sono imbattuto il seguente per creare un file server.pfx:

makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer 
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx 

Poi ho caricato in codice con:

certificate = new X509Certificate2("server.pfx", "password"); 

(Non ho effettivamente codificato la password in quel modo :-)

Il trucco era sapere che avevo bisogno di un file pfx e che avevo bisogno di caricarlo usando la classe X509Certificate2, piuttosto che X509Certifica TE.

+0

Salvato la mia vita. Ho usato questo metodo per fornire un certificato tramite la mia applicazione server proxy al browser del cliente. So che non è un metodo giusto, ma tutto è OK. –

+0

Ma questo metodo non funziona bene per il server proxy. Hai qualche idea su come risolverlo? –

+0

Non funziona. Ottengo un 'CryptographicException' che dice" La password di rete specificata non è corretta. ", Che è palesemente falso perché ho usato la password' x', che è molto difficile da mistificare. Qualche idea per una correzione? – Timwi

1

Esistono numerosi strumenti che consentono di agire come CA propria e generare un certificato. XCA è uno di questi. Ad esempio, esistono anche numerosi metodi che utilizzano i comandi OpenSSL.

La generazione di un certificato autofirmato può sembrare l'opzione più semplice, ma l'utilizzo di una CA di test (e un certificato del server separato) potrebbe valerne la pena. Ciò consentirebbe di importare la CA di test nell'archivio del browser, se necessario, per rendere i test più realistici. Non è molto più difficile con gli strumenti giusti (ad esempio XCA).

Una volta generato il certificato del server e la relativa chiave privata, trasformarlo in un file PKCS # 12 (.p12/.pfx).

Dovresti quindi poterlo caricare utilizzando X509Certificate2.import(...). (. Vedere l'esempio in this answer)

+0

Per coloro che vogliono utilizzare questa soluzione. Penso che la mia risposta possa integrare ciò che @Bruno ha detto, [qui] (http://stackoverflow.com/questions/9982865/sslstream-example-how-do-i-get-certificates-that-work/38155120#38155120) I mostra come generare un certificato valido con OpenSSL. – Joseph

3

Niki Loche funziona.

Se si ottiene The specified network password is not correct., quindi si dovrebbe provare senza password in C#. Non importa quale sia la password inserita in makecert.

certificate = new X509Certificate2("Server.pfx", ""); 

Ma se si desidera utilizzare la password (c'è una ragione, è lì :)), provare a cambiare pvk2pfx.exe comando:

pvk2pfx.exe" -pvk Server la password -pi .pvk -spc Server.cer -pfx Server.pfx

e in C# inserire:

certificato = new X509Certificate2 ("Server.pfx", "password");

password deve essere la stessa che è nella creazione di file di cer

che ha fatto il trucco per me spero che aiuterà qualcuno

+0

Grazie! Sono contento di aver letto le altre risposte :) –

0

ho avuto lo stesso problema quando si importa un certificato del computer dal negozio macchina (non il negozio utente) ho risolto eseguendo visiva Studio come amministratore , poiché sono richiesti i privilegi di amministratore per accedere alla chiave privata di un certificato del negozio di macchine.

Problemi correlati