2015-07-12 52 views
-1

我目前正在开发一个包含通过TCP进行通信的服务器和客户端的项目。因此我想要使用SSL来保护我的连接。我在http://www.dib0.nl/code/367-using-a-client-certificate-with-an-ssl-stream-in-c找到了一个很好的例子。只有一个问题。它确实接受所有证书。我知道我必须修改 RemoteCertificateValidationCallback函数并检查是否有任何 SslPolicyErrors但当我这样做时,我在服务器端和客户端都会发生认证错误。它说证书是无效的。 我正在使用使用openssl创建的证书。TCP插座验证SslStream在C#中的SSL证书

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, 
     X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     if (sslPolicyErrors != SslPolicyErrors.None) 
      return false; 
     return true; 
    } 

我希望有人能弄清楚我的错误。我认为这与证书有关。 谢谢你的帮助。

回答

-1

在ValidateServerCertificate中,尝试通过为sslPolicyErrors添加一条记录行来记录错误。这会告诉你服务器证书的问题(如果有的话),以便你知道问题是服务器还是客户端。对于某些不同的错误,您可能希望返回true,对于其他您想要返回false的错误。

0

我在我的TCP客户端/服务器程序中使用了下面的代码。它的工作很好!如果您在同一台机器上创建了TCP客户端/服务器,则必须在MMC存储中同时拥有客户端/服务器证书。

private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
     { 
      // For Server Certificate Authentication Errors 
      if (sslPolicyErrors == SslPolicyErrors.None) 
       return true; 

      Console.WriteLine("Certificate error: {0}", sslPolicyErrors); 

      // Do not allow this client to communicate with unauthenticated servers. 
      return false; 

      // Return True if you want to accept all certificate. 
      //return true; 
     } 

希望这也适用于你!