C#SSL安全套接字
我有一个很好的通信器应用程序,用C#编写。现在我需要实现到服务器的安全连接。我曾尝试将套接字和TcpClient对象更改为SslStream,但出现了一些错误 首先,我使用makecert生成了一个.cer证书。OpenSSL证书不适用于我,因为它们不包含私钥。接下来,我在服务器上创建了一个证书对象,并将其绑定到SslStream:C#SSL安全套接字,c#,sockets,ssl,ssl-certificate,sslstream,C#,Sockets,Ssl,Ssl Certificate,Sslstream,我有一个很好的通信器应用程序,用C#编写。现在我需要实现到服务器的安全连接。我曾尝试将套接字和TcpClient对象更改为SslStream,但出现了一些错误 首先,我使用makecert生成了一个.cer证书。OpenSSL证书不适用于我,因为它们不包含私钥。接下来,我在服务器上创建了一个证书对象,并将其绑定到SslStream: X509Certificate serverCertificate = X509Certificate.CreateFromCertFile("ca.cer");
X509Certificate serverCertificate = X509Certificate.CreateFromCertFile("ca.cer");
TcpClient clientSocket = this.tcpListener.AcceptTcpClient();
SslStream ssls = new SslStream(clientSocket.GetStream(), false);
ssls.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls, true);
在客户端,我正在这样做:
TcpClient client = new TcpClient(settings.IP, settings.Port);
sslStream = new SslStream(client.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient(settings.IP);
public 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;
}
但是客户端函数抛出一个异常。我尝试了其他几种方法参数,但这些都不适用于我
谁能帮助我,或者一步一步地解释如何把简单的插座换成安全的插座?要明确的是,SSL不是要求-如果有更简单的方法使连接安全,我可以使用它
编辑: 异常消息如下:
The remote certificate is invalid according to the validation procedure.
有什么例外
我猜您会遇到异常,因为您的客户端证书被服务器拒绝为有效(除非您做了必要的事情来建立信任)
当使用自签名证书(由makecert创建的证书)时,在创建SslStream对象时,还必须提供客户端证书验证回调。使用此构造函数重载。CER文件通常包含没有私钥的证书。把它加载到服务器上是行不通的。您还需要一个私钥。最简单的方法是生成证书和密钥,并将它们一起保存为PFX格式。然后从服务器上的PFX加载证书和密钥
现在,仅使用代码对服务器进行身份验证。这是您想要做的吗(即,您不想在服务器上对客户端进行身份验证吗)?对不起-“根据验证过程,远程证书无效。”对于自签名证书。总是从证书验证处理程序(ValidateServerCertificate)返回true,我听说这个问题(不包括私钥),但我认为我的.cer没有问题。在此错误之前,我得到了关于私钥的异常。然后我用另一个程序生成了证书文件,并传递了这个错误。我需要d SSL,只是为了安全传输。认证其实并不必要。对不起,我的腿瘸了,但我好像在听关于安全的讲座:)@Matthew当然编辑这个问题改变了一切。你在sslPolicyErrors中得到了什么?