2009-02-11 37 views
61

Şu anda 3. tarafın oluşturduğu bir sistemle bütünleşiyorum. Bu sistem XML/HTTPS kullanarak bir istek göndermemi gerektiriyor. 3. parti bana sertifika göndermek ve bunu WebClient + HTTPS Sorunları

aşağıdaki kodu kullanabilirsiniz

yüklü:

temel alınan bağlantı kapatıldı

: kurulamadı

using (WebClient client = new WebClient()) 
{ 
    client.Headers.Add(HttpRequestHeader.ContentType, "text/xml"); 

    System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); 
    var response = client.UploadData(address, "POST", encoding.GetBytes(msg)); 
} 

Bu kod WebException aşağıdaki döndürür SSL/TLS güvenli kanalı için güven ilişkisi.

GÜNCELLEME ben karşı çalışıyorum bir test sunucusu olduğundan, Sertifika güvenilir değil ve doğrulama başarısız ... oluşturmak, test/ayıklama ortamında bu atlamak için yeni bir ServerCertificateValidationCallback

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(bypassAllCertificateStuff); 

ve buradaki "sahte" geri arama

private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 

oku daha here ve here

+4

+1 kullandığınız kod ile güncellenmesi için. Bunun için benim için güzel hızlı düzeltme. –

+0

SSL web servislerini hata ayıklama yaparken fiddler CA kökü dev-makinesime kaydetmek yerine bu çok kullanışlıdır! Kukla geri çağırma işlemini üretim koduna dahil etmeyecek parçanın etrafında bir # DEBUG koymuştum. – jishi

+0

Git [burada.] (Http://forums.asp.net/p/1174025/1972251.aspx) – Lonzo

cevap

8

Orijinal yanıtın VB.NET sürümü için, işte buradasınız ('AddressOf' işleci ile olayları kurmak gerektiğinde dönüştürücüler işe yaramıyor). 1 Bir WebClient'ı (kullanmadan önce gider kodu) veya HttpWebRequest() nesnesi:

ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf bypassAllCertificateStuff) 

..ve kadar kablolu yöntem kodu:

Private Shared Function bypassAllCertificateStuff(ByVal sender As Object, ByVal cert As X509Certificate, ByVal chain As X509Chain, ByVal [error] As System.Net.Security.SslPolicyErrors) As Boolean 
    Return True 
End Function 
68

Tüm sertifikaları izin vermek kod en kısa nottur Aslında, bu hata için iyi çalışır ve iyi çalışır. İletişimin güvenli olup olmadığı konusunda sertifika bilgilerini kontrol eden ve sertifika bilgilerine göre karar veren bir uygulama sağlamanız gerektiğini söylemek gereksizdir. Test amaçlı olarak yukarıdaki kod satırını kullanın.

+0

Gerçekten entegrasyon testleri için çok yardımcı! –

-1

bu deneyin çalışır:

class Ejemplo 
{ 
    static void Main(string[] args) 
    { 
     string _response = null; 
     string _auth = "Basic"; 
     Uri _uri = new Uri(@"http://api.olr.com/Service.svc"); 

     string addres = @"http://api.olr.com/Service.svc"; 
     string proxy = @"http://xx.xx.xx.xx:xxxx"; 
     string user = @"platinum"; 
     string pass = @"01CFE4BF-11BA"; 


     NetworkCredential net = new NetworkCredential(user, pass); 
     CredentialCache _cc = new CredentialCache(); 

     WebCustom page = new WebCustom(addres, proxy); 
     page.connectProxy(); 

     _cc.Add(_uri, _auth, net); 

     page.myWebClient.Credentials = _cc; 

     Console.WriteLine(page.copyWeb()); 
    } 

} 

public class WebCustom 
{ 
     private string proxy; 
     private string url; 
     public WebClient myWebClient; 
     public WebProxy proxyObj; 
     public string webPageData; 


     public WebCustom(string _url, string _proxy) 
     { 
      url = _url; 
      proxy = _proxy; 
      myWebClient = new WebClient(); 
     } 

     public void connectProxy() 
     { 
      proxyObj = new WebProxy(proxy, true); 
      proxyObj.Credentials = CredentialCache.DefaultCredentials; 
      myWebClient.Proxy = proxyObj; 
     } 

     public string copyWeb() 
     { return webPageData = myWebClient.DownloadString(url); } 
} 
+2

Çözümünüzün HTTP_S_ sorununu nasıl giderdiğini açıklar mısınız? –