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 - [プログラミング] -

コメント一覧

K-UDA のコメント

こんばんは。
私が利用しているBIGLOBEはSSLがFTPで使えないそうです。
それで最近のホームページ改変事件の対策で海外
からFTPでのアクセスができなくなるそうです。
2010-02-10 20:28:54

miyachi のコメント

K-UDAさん、こんばんわ。
FTPって実はそもそも仕組み的に完全な暗号化は出来ません。SFTPかSCPを使わないと駄目ですね。なので私はFTPソフトを使うことはほとんど無くなりました。大手のISPもそろそろFTPは完全に無くした方が良いと思うのですが色々事情があって難しいんでしょうね(^^;
2010-02-12 00:44:52

コメントを書く

このアイテムは閲覧専用です。コメントの投稿、投票はできません。