久々に備忘録です。C#のWebRequestクラスや、 WebClientクラスでhttpsプロトコルでサーバーと通信しようとしたらエラーが発生・・・。
例外を調べてみると、
「検証プロシージャによると、リモート証明書は無効です。」
と言われてしまいました。
これはどうやらSSL通信時の証明書が自己署名証明書なのが原因のよう、 最近のブラウザ(FFやIE7)でも自己署名証明書だと警告がでるものね・・・ということで、この例外を回避する方法をさがしたところ、 2つの方法を発見。
.NET 1.1や.NET Compact Frameworkの場合
サーバー証明書のポリシーを管理している「System.Net.ServicePointManager」のプロパティ
「CertificatePolicy」を設定し直す。
具体的には、「ICertificatePolicy」インターフェースを実装したクラスを作り、メソッド
「CheckValidationResult」を定義する。このメソッドの中に認証ポリシーを記述する。そして、
「System.Net.ServicePointManager.CertificatePolicy」
へ作ったクラスのインスタンスを設定してやればOK
詳しくは@ITのInserder .NET会議室のこちら
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=15416
.NET 2.0の場合
「System.Net.ServicePointManager」クラスのプロパティ
「ServerCertificateValidationCallback」に今度はコールバックを設定する。
詳しくは
http://blogs.wankuma.com/mayuki/archive/2006/11/11/44696.aspx
というわけで、めでたくhttpsで通信できるようになりました。
Inserder .NET会議室さん、using Misuzilla.Wankuma;さんありがとうございました。あ、 あとMSDNも(笑)