オレオレ証明(自己証明書)を突破する

https:// 〜 」のWebページにアクセスしたいが
証明書に問題があって(期限切れや自己証明書など)アクセスできない場合は以下のようにしてアクセスできます。
(ただし、Compact Frameworkと.net Framework2.0での動作は確認済みですが、.net Framework1.0は確認していません。)
WindowsMobileでこれをやる方法を探していたのですが、
Compact Frameworkじゃ無理かなあとも思ったのですができました。
(Compact FrameworkにはSystem.Net.Securityがなかった。)
Google先生は偉大だなあ。




Compact Framework.net Framework1.1の場合

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;


namespace DeviceTest
{
  class Program
  {
    static void Main(string args)
    {
      System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
      WebRequest request = WebRequest.Create("https://localhost/");
      WebResponse response = request.GetResponse();
      Stream stream = response.GetResponseStream();
      StreamReader sr = new StreamReader(stream);
      textBox1.text = sr.ReadToEnd();
    }
  }


  public class MyPolicy : ICertificatePolicy
  {
    public bool CheckValidationResult(
    ServicePoint srvPoint,
     System.Security.Cryptography.X509Certificates.X509Certificate certificate,
    WebRequest request, int certificateProblem)
    {
      // 信用したことにする
      return true;
    }
  }
}



.net Framework2.0の場合

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;


namespace SessionTest
{
  class Program
  {
    static void Main(string args)
    {
     ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnRemoteCertificateValidationCallback);
      WebRequest request = WebRequest.Create("https://localhost/");
      WebResponse response = request.GetResponse();
      Stream stream = response.GetResponseStream();
      StreamReader sr = new StreamReader(stream);
      Console.WriteLine(sr.ReadToEnd());
    }

    static private bool OnRemoteCertificateValidationCallback(
      Object sender,
      X509Certificate certificate,
      X509Chain chain,
      SslPolicyErrors sslPolicyErrors)
    {
      // 信用したことにする
      return true;
    }
  }
}