C#

SSL証明書のエラーを回避

自分で用意した無効な証明書によってSSL通信をする場合、放っておくとエラーになりますが、ServicePointManager.ServerCertificateValidationCallbackを設定してtrueを返すことで回避できます。

    private static bool RemoteCertificateValidationCallback(object sender,
	    System.Security.Cryptography.X509Certificates.X509Certificate certificate,
	    System.Security.Cryptography.X509Certificates.X509Chain chain,
	    System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
	    if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
	    {
		    return true;
	    }

	    if (sender is System.Net.WebRequest)
	    {
		    System.Net.WebRequest Request = (System.Net.WebRequest)sender;

		    switch (Request.RequestUri.Host)
		    {
			    // localhostの場合は証明書が無効であってもエラーにしない。

			    case "localhost":
				    return true;
		    }
	    }

	    // 上記以外はエラーにする。

	    return false;
    }

    private string GetResponse(string Url)
    {
	    if (System.Net.ServicePointManager.ServerCertificateValidationCallback == null)
	    {
		    System.Net.ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCallback;
	    }

	    System.Net.WebRequest Request = System.Net.WebRequest.Create(Url);

	    using (System.Net.WebResponse Response = Request.GetResponse())
	    {
		    using (System.IO.Stream ResponseStream = Response.GetResponseStream())
		    {
			    using (System.IO.StreamReader Reader = new System.IO.StreamReader(ResponseStream))
			    {
				    return Reader.ReadToEnd();
			    }
		    }
	    }
    }