62

現在、サードパーティが作成したシステムと統合しています。このシステムでは、XML/HTTPS を使用してリクエストを送信する必要があります。サードパーティから証明書が送られてきて、インストールしました

次のコードを使用します。

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

このコードは次を返しますWebException

基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。

更新私が取り組んでいるテストサーバーであるため、証明書は信頼されておらず、検証は失敗します...テスト/デバッグ環境でこれをバイパスするには、新しいServerCertificateValidationCallback

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

これが私の「偽の」コールバックです

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

ここここでもっと読む

4

3 に答える 3

71

すべての証明書を許可するコードの最短表記は、実際には次のとおりです。

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

そして、このエラーに対してうまく機能します。言うまでもなく、実際に証明書をチェックし、証明書情報に基づいて通信が安全かどうかを判断する実装を提供する必要があります。テスト目的で、上記のコード行を使用します。

于 2011-04-03T23:29:05.090 に答える
8

元の回答のVB.NETバージョンについては、こちらをご覧ください(「AddressOf」演算子でイベントを接続する必要がある場合、コンバーターはうまく機能しません)。WebClient() または HttpWebRequest() オブジェクトを使用する前の最初のコード:

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

..そして接続されたメソッド コード:

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
于 2010-10-01T20:18:49.500 に答える
-1

これを試してください、うまくいきます:

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); }
}
于 2012-04-24T20:37:54.547 に答える