2015-07-12 38 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; 
     } 

希望這也適用於你!