クライアント証明書付きのSSL
仕事でクライアント証明書付きのSSL通信を行うことになったので勉強中。
サーバはIIS7.5。
まずサーバ証明書が必要。実験用としては「インターネットインフォメーションサービスマネージャー」の「サーバー証明書」をクリックし、「自己署名入り証明書の作成」から作成する。CNは「接続」ペインに書いてあるサーバ名になるので注意。
次に名前解決。上記サーバ名で名前解決できないならクライアント側のHOSTSファイルにサーバ名とIPアドレスを記述して名前解決できるようにしておく。
次にクライアント証明書を作る。この手の解説サイトは色々あるけどわかったようなわからんような。今回は以下のサイトの記述をパクる。
http://linuxconfig.org/apache-web-server-ssl-authentication
まじめにcrlDistributionPoints(廃棄リスト配布ポイント)が記述されているが、そんなものは用意していないのでコメントアウト。
クライアント証明書をブラウザ以外でも使用するのでclient.keyとclient.cerは削除せずに残しておく。
これで作ったCA証明書であるca.cerをサーバ側のPCの「信頼されたルート証明機関」にインストールする。必ずmmc.exeを実行し、証明書スナップインを「コンピュータアカウント」で実行し、ここから「信頼されたルート証明機関」にインポートする。
クライアント証明書はIEのインターネトオプションの「コンテンツ」タブの「証明書」ボタンを押し、「インポート」ボタンを押してclient.p12ファイルを選択する。自動的に「個人」タブに入る。
念のためIEのキャッシュとSSLキャッシュをクリアし(「SSL状態のクリア」を押す)https://hogehoge/でアクセスする。これで成功した。
次にLinuxマシンからwgetで試してみる。こちらは面倒なのでサーバ証明書はチェックせず--no-check-certificateを指定しておく。クライアント証明書は--certificateオプションでclient.cerを、--private-keyオプションでclient.keyを、--ca-certificationでca.cerを指定する。具体的には以下のようになる。
> wget https://hogehoge/ --no-check-certificate --certificate=client.cer --private-key=client.key --ca-certificate=ca.cer
無事index.htmlが取得できるはず。
最後はjavaでクライアント証明書を送る。
サーバはIIS7.5。
まずサーバ証明書が必要。実験用としては「インターネットインフォメーションサービスマネージャー」の「サーバー証明書」をクリックし、「自己署名入り証明書の作成」から作成する。CNは「接続」ペインに書いてあるサーバ名になるので注意。
次に名前解決。上記サーバ名で名前解決できないならクライアント側のHOSTSファイルにサーバ名とIPアドレスを記述して名前解決できるようにしておく。
次にクライアント証明書を作る。この手の解説サイトは色々あるけどわかったようなわからんような。今回は以下のサイトの記述をパクる。
http://linuxconfig.org/apache-web-server-ssl-authentication
まじめにcrlDistributionPoints(廃棄リスト配布ポイント)が記述されているが、そんなものは用意していないのでコメントアウト。
クライアント証明書をブラウザ以外でも使用するのでclient.keyとclient.cerは削除せずに残しておく。
これで作ったCA証明書であるca.cerをサーバ側のPCの「信頼されたルート証明機関」にインストールする。必ずmmc.exeを実行し、証明書スナップインを「コンピュータアカウント」で実行し、ここから「信頼されたルート証明機関」にインポートする。
クライアント証明書はIEのインターネトオプションの「コンテンツ」タブの「証明書」ボタンを押し、「インポート」ボタンを押してclient.p12ファイルを選択する。自動的に「個人」タブに入る。
念のためIEのキャッシュとSSLキャッシュをクリアし(「SSL状態のクリア」を押す)https://hogehoge/でアクセスする。これで成功した。
次にLinuxマシンからwgetで試してみる。こちらは面倒なのでサーバ証明書はチェックせず--no-check-certificateを指定しておく。クライアント証明書は--certificateオプションでclient.cerを、--private-keyオプションでclient.keyを、--ca-certificationでca.cerを指定する。具体的には以下のようになる。
> wget https://hogehoge/ --no-check-certificate --certificate=client.cer --private-key=client.key --ca-certificate=ca.cer
無事index.htmlが取得できるはず。
最後はjavaでクライアント証明書を送る。
コメント