2010-02-09

WindowsでのSSLクライアント認証プログラム  [by miyachi]

先日事情があってWindows上でのSSLクライアント認証のプログラミングの調査をしました。良く考えたら数年前に使ったことがあったのを忘れていました。健忘録として書いておきます。

SSLのサーバ認証は皆さん https で始まるサイトを利用する事で使っていると思います。クライアント認証はサーバ側が逆にクライアントを認証して接続の可否を決める仕組みです。X.509形式証明書と秘密鍵を使いますのでPKI的な素養が必要ですがPKIとは言えませんね。

と言うことでプログラミングで考えるとクライアント側からサーバへのhttp通信になります。良く使われているレガシーな通信APIとしてはWinInetがあります。Win32からhttp等の通信をするならWinInetが一般的です。msxml等からも使われています。ところがWinInetはSSLサーバ認証は対応していますがSSLクライアント認証には対応していません。SSLクライアント認証に対応するにはWinInetの後継であるWinHTTP英文)を使うとなっています。

でも何だかWinHTTPを生で使うのは面倒そうです。と言うことで.NET FrameworkのクラスであるHttpWebRequestHttpWebResponseを使う事をお勧めします。HttpWebRequestとHttpWebResponseを使ったクライアント認証の説明とサンプルのページもあります。私の場合はこのページだけでうまく使うことができました。

少し面倒なのが X509Certificate クラスで接続に利用するクライアント証明書を用意するところでしょうか。先のサンプルページでは「.cer ファイルが必要」となっていますがこれはWindows証明書ストアから取得した方が間違いがありません。X509Certificate2クラスの関連クラスを利用すればGUIによる証明書選択も可能になりますし必要な証明書を取り出す事も可能です。
2010-02-09 17:56:18 - miyachi - - [プログラミング] -