web-dev-qa-db-ja.com

httpsを使用してWebRequestを使用してSSL暗号化サイトにアクセスするにはどうすればよいですか?

ユーザーが提供したURLからコンテンツを読み取るプログラムを作成しています。私の問題は、次のようなコードにあります。

Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());

そして、提供されたrlが "https://" URLの場合、これは壊れています。 SSL暗号化コンテンツで動作するように、誰でもこのコードを変更するのを手伝ってもらえますか?ありがとう。

104

正しい方法で実行していますが、ユーザーは無効なSSL証明書がインストールされているサイトにURLを提供している可能性があります。実際のWebリクエストを行う前に次の行を入力すると、これらの証明書の問題を無視できます。

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

ここで、AcceptAllCertificationsは次のように定義されます

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
}
168
LukeDuff

このリンクはあなたの興味を引くでしょう: http://msdn.Microsoft.com/en-us/library/ds8bxk2a.aspx

HTTP接続の場合、WebRequestクラスとWebResponseクラスはSSLを使用して、SSLをサポートするWebホストと通信します。 SSLを使用するかどうかは、指定されたURIに基づいてWebRequestクラスによって決定されます。 URIが「https:」で始まる場合、SSLが使用されます。 URIが「http:」で始まる場合、暗号化されていない接続が使用されます。

18
GurdeepS

これは私のために働いた:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
14
Nani