C#SSL服务器模式必须使用具有相应私钥的证书

我将学习如何在C#中处理作为服务器端的HTTPS流量,并且在第一步中我遇到了一些麻烦。

这是一些代码( http://pastebin.com/C4ZYrS8Q ):

class Program { static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) return true; Console.WriteLine("Certificate error: {0}", sslPolicyErrors); return false; } static void Main() { var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080); tcpListener.Start(); var clientAccept = tcpListener.AcceptTcpClient(); Thread.Sleep(1000); if (clientAccept.Available > 0) { var sslStream = new SslStream(clientAccept.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); var certificate = new X509Certificate("path\server.pfx", "password"); sslStream.AuthenticateAsServer(certificate); } Console.ReadLine(); } } 

不要争辩! :)这只是测试代码,我只想在C#中实现SSL处理的一些基本步骤。

所以……问题发生在这一行:

 sslStream.AuthenticateAsServer(certificate); 

在此处输入图像描述

从俄语翻译为: – SSL服务器模式必须使用具有相应私钥的证书。

我想,我的X509证书不正确,但再次检查:

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

似乎X509的创作一切都很好,其他证据就是这条线很好用:

 var certificate = new X509Certificate("path\server.pfx", "password"); 

并且程序没有在上面的行中抛出exception。

那么,我的代码中的SSL处理有什么问题?我如何处理作为服务器端的传入SSL流?

一切都很好,答案是使用X509Certificate2类而不是X509Certificate

并将您创建的证书添加到信任列表中。