我有一個很好的工作通信器應用程序,用C#編寫。現在我需要實現到服務器的安全連接。我試過將Socket和TcpClient對象改成SslStream,但是我得到了一些錯誤。C#SSL安全套接字
首先,我使用makecert生成了一個.cer證書。 OpenSSL證書不適合我,因爲它們不包含私鑰。接下來,我創建的證書對象的服務器上,並將其綁定到SslStream:
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;
}
但AuthenticateAsClient函數拋出異常。我嘗試了幾個其他的方法參數,但沒有一個適用於我。
任何人都可以幫助我,或一步一步解釋如何將簡單的套接字變成安全的套接字?要清楚的是,SSL不是要求 - 如果有更簡單的方法來保證連接的安全,我可以使用它。
編輯:異常 消息如下:
The remote certificate is invalid according to the validation procedure.
對不起 - 「根據驗證過程,遠程證書無效。」 –
用於自簽名證書。總是從證書驗證處理程序(ValidateServerCertificate)返回true – KRam