2010-07-12 107 views
5

我试图制作一个简单的服务器,它侦听端口并使用SSL进行身份验证。我有文件设置带签名证书的SSL服务器套接字

server.crt 
server.key 
my-ca.crt 

用openssl教程(http://www.vanemery.com/Linux/Apache/apache-SSL.html)获得。 my-ca.crt是我自己的CA证书,server.crt包含x509服务器证书(用my-ca.crt签名),server.key是对应的私钥。

我现在不知道如何在c#中加载这三个文件;我有一些像

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

不工作(我得到一个

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

) ,但我不知道如何添加server.key和/或my-ca.crt

回答

3

要在形式

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

你应该保存证书PKCS12格式使用X509Certificate2。见http://www.madboa.com/geek/openssl/#cert-pkcs12http://www.openssl.org/docs/apps/pkcs12.html

+0

我一直试图做这样的: 'OpenSSL的REQ -x509 -nodes -days 365 -newkey RSA:1024 -keyout “TEMP \ signkey.key” 退房手续“TEMP \ signkey.key “-config”openssl.cfg“'和 'openssl pkcs12 -export -out”temp \ certificate.pfx“-in”temp \ signkey.key“-name”NAME“'但是仍然存在异常。任何想法? – 2011-12-01 01:28:30

+0

@Christoph您需要在导出过程中包含私钥,如下所示:'openssl pkcs12 -export -out certificate.pfx -in certificate.cer -inkey certificate.key -name“SSL stream 带'-inkey'参数的证书''' 。 – Joseph 2016-06-27 15:32:01