2010-07-12 6 views
5

J'essaie de créer un serveur simple qui écoute sur un port et s'authentifie avec ssl. J'ai des fichiersConfiguration d'un socket serveur ssl avec certificat signé

server.crt 
server.key 
my-ca.crt 

obtenus avec un tutoriel OpenSSL (http://www.vanemery.com/Linux/Apache/apache-SSL.html). my-ca.crt est mon propre certificat de CA, server.crt contient le certificat de serveur x509 (signé avec my-ca.crt) et server.key est la clé privée correspondante. Je ne sais pas comment charger ces trois fichiers dans C#;

J'ai quelque chose comme

serverCertificate = new X509Certificate2("server.crt", "secret_password"); 
sslStream.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls, true); 

qui ne fonctionne pas (j'obtenir un

Unhandled Exception: System.NotSupportedException: The server mode SSL must use a certificate with the associated private key. 

) mais je n'ai pas la moindre idée comment ajouter le server.key et/ou my-ca.crt.

Répondre

3

Pour utiliser X509Certificate2 sous la forme

serverCertificate = new X509Certificate2("server.pfx", "secret_password"); 

vous devez enregistrer le certificat au format PKCS12. Voir http://www.madboa.com/geek/openssl/#cert-pkcs12 et http://www.openssl.org/docs/apps/pkcs12.html

+0

j'ai essayé de le faire comme ceci: 'req OpenSSL -x509 -nodes -days 365 -newkey rsa: 1024 -keyout "temp \ signkey.key" départ « temp \ signkey.key "-config" openssl.cfg "' et 'openssl pkcs12 -export -out" temp \ certificat.pfx "-in" temp \ signkey.key "-nom" NAME "' mais l'exception reste. Une idée? –

+0

@Christoph vous devez inclure la clé privée sur le processus d'exportation comme suit: 'openssl pkcs12 -export -out certificat.pfx -in certificat.cer -inkey certificat.key -name" SSL flux Certificat "' avec paramètre -inkey' . – Joseph