2014-06-12 2 views
0

J'essaie d'établir une connexion SSL/TLS à mon serveur de discussion personnel. Mon extrait de code est le suivantConnexion SSL/TLSV1 en utilisant C#

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); 
     } 
    } 

Maintenant, après l'exécution du programme

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

Le principal bloc de fil. Probablement pour cela, la poignée de main SSL ne démarre pas. Maintenant, dites-moi pourquoi le bloc de thread principal. Merci

+0

J'utilise le serveur ** openfire **. –

Répondre

1

Je ne connais pas beaucoup de C#, mais à partir de la documentation de AuthenticateAsClient, il attend ici les certificats clients que vous utilisez pour vous authentifier auprès du serveur SSL. Et ceux-ci doivent avoir une clé privée, sinon vous ne pouvez pas les utiliser. Mais, ce que vous utilisez comme certificats sont les certificats racine de confiance, qui sont utilisés pour vérifier le certificat du serveur et pour lesquels vous n'avez pas de clé privée. Peut-être que vous avez besoin de vous familiariser avec les bases de SSL, par exemple. qui utilise quels certificats et pourquoi etc.

+0

Merci mon pote .... –

-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

Ajoutez du contexte pour expliquer le code. –

Questions connexes