現在、サードパーティが作成したシステムと統合しています。このシステムでは、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セキュアチャネルの信頼関係を確立できませんでした。
[〜#〜] update [〜#〜]これはテストサーバーであるため、証明書は信頼されず、検証は失敗します。 。テスト/デバッグ環境でこれをバイパスするには、新しい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;
}
すべての証明書を許可するコードの最短表記は、実際には次のとおりです。
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
そして、このエラーに対してうまく機能します。言うまでもなく、実際に証明書をチェックし、通信が安全かどうかを証明書情報に基づいて決定する実装を提供する必要があります。テスト目的で、上記のコード行を使用します。
元の回答の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