2014-06-12 30 views
0

我試圖建立SSL/TLS連接到我的個人聊天服務器。 我的代碼段是在程序的執行使用C#的SSL/TLSV1連接#

_sslStream.AuthenticateAsClient("lap-020.alumnus.co.in", collection, SslProtocols.Tls, true);

主線程塊後如下

public void StartAuthentication(XMPPConnection connection) 
    { 
     NetworkStream networkStream = new NetworkStream(connection._sock); 
     _sslStream = new SslStream(networkStream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), new LocalCertificateSelectionCallback(ClientCertificateSelectionCallback)); 
     X509CertificateCollection collection = new X509CertificateCollection(); 
     collection.Add(new X509Certificate(@"D:\ca-certs\AddTrust_External_Root.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\America_Online_Root_Certification_Authority_1.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\AOL_Member_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Baltimore_CyberTrust_Root.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\CAcert_Class3.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\CAcert_Root.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Deutsche_Telekom_Root_CA_2.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\DigiCertHighAssuranceCA-3.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\DigiCertHighAssuranceEVRootCA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Entrust.net_2048.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Entrust.net_Secure_Server_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Equifax_Secure_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Equifax_Secure_Global_eBusiness_CA-1.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Go_Daddy_Class_2_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\GTE_CyberTrust_Global_Root.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Microsoft_Internet_Authority_2010.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Microsoft_Secure_Server_Authority_2010.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\StartCom_Certification_Authority.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Thawte_Premium_Server_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Thawte_Primary_Root_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\ValiCert_Class_2_VA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\VeriSign_Class3_Extended_Validation_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\Verisign_Class3_Primary_CA.pem")); 
     collection.Add(new X509Certificate(@"D:\ca-certs\VeriSign_International_Server_Class_3_CA.pem")); 
     try 
     { 
      _sslStream.AuthenticateAsClient("lap-020.alumnus.co.in", collection, SslProtocols.Tls, true); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

查閱。可能對於此ssl握手不啓動。現在告訴我爲什麼主線程阻塞。謝謝

+0

我正在使用** openfire **服務器。 –

回答

1

我不太瞭解C#,但是來自AuthenticateAsClient的文檔,它期望在這裏使用客戶端證書來驗證您對SSL服務器的身份。這些必須有一個私鑰,否則你不能使用它們。但是,您用作證書的是受信任的根證書,它用於檢查服務器的證書以及您沒有私鑰的地方。

也許您需要讓自己更熟悉SSL的基本知識,例如,誰使用哪些證書,爲什麼等。

+0

感謝哥們.... –

-1
X509Certificate2Collection certificates = new X509Certificate2Collection(); 
certificates.Import(**uri**, **CertPass**, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); 

ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true; 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(host); 
req.AllowAutoRedirect = true; 
req.ClientCertificates = certificates; 
req.Method = "GET"; 
req.ContentType = "application/x-www-form-urlencoded"; 
WebResponse resp = req.GetResponse(); 
var html = new StreamReader(resp.GetResponseStream()).ReadToEnd(); 
+0

添加一些上下文來解釋代碼。 –