【问题标题】:C# SSL secure socketsC# SSL 安全套接字
【发布时间】:2011-06-23 09:24:52
【问题描述】:

我有一个用 C# 编写的可以正常工作的通信器应用程序。现在我需要实现与服务器的安全连接。我尝试将 Socket 和 TcpClient 对象更改为 SslStream,但出现了一些错误。

首先,我使用 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.

【问题讨论】:

    标签: c# sockets ssl ssl-certificate sslstream


    【解决方案1】:

    有什么例外?

    我猜你得到了例外,因为你的客户端证书被服务器拒绝为有效(除非你做了必要的事情来建立信任)。

    当您使用自签名证书(由 makecert 创建的证书)时,您还必须在创建 SslStream 对象时提供客户端证书验证回调。使用这个构造函数重载http://msdn.microsoft.com/en-us/library/ms145056.aspx

    【讨论】:

    • 抱歉 - “根据验证程序,远程证书无效。”
    • 对于自签名证书。始终从证书验证处理程序 (ValidateServerCertificate) 返回 true
    【解决方案2】:

    .CER 文件通常包含没有私钥的证书。将其加载到服务器中是行不通的。您还需要一个私钥。最简单的方法是生成证书和密钥并将它们一起保存为 PFX 格式。然后从服务器上的 PFX 加载证书和密钥。

    现在您的代码仅对服务器进行身份验证。这是您想要做的(即您不想在服务器上对客户端进行身份验证)吗?

    【讨论】:

    • 我听说过这个问题(不包括私钥),但我认为我的 .cer 是可以的。在此错误之前,我得到了关于私钥的异常。然后我用另一个程序生成了证书文件,并通过了这个错误。我需要 d SSL 只是为了安全传输。认证并不是真正需要的。对不起,我的跛脚,但似乎我在讲安全课时睡着了:)
    • @Matthew 编辑问题肯定会改变一切。你在 sslPolicyErrors 中得到了什么?
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多