GlassFishによるクライアント認証


ApacheなどのWebサーバがなく、GlassFishのみしか無い環境であっても、GlassFishの機能を使ってクライアント認証を実現出来ます。

方法は寺田佳央さんのブログに書いてあるのですが、はまった箇所があります。また寺田さんのブログは、ある程度OpenSSLが分かっている前提で書かれているので、何も考えずコマンドをコピペすると当然動作しない箇所があります。2010/2/8の記事なのでGlassFishのバージョン違いによる齟齬もあるのかもしれません。

ここではGlassFish v3.1.2で動作確認が取れた方法をもとに、寺田さんのブログの手順を追いかけながら補足していきたいと思います。

GlassFish のドメイン管理サーバ上でHTTP リスナーの設定をクライアント認証対応に変更

ブログのコマンドはGlassFishの構成に依存するようです。
GUIの管理コンソールでもこの設定は可能なので、そちらで設定するのも手です。

クライアント証明書の秘密鍵を作成

補足なし。

クライアント証明書用のCSRを作成

補足なし。

認証局(CA)でクライアント証明書を署名

ここでopenssl-client.cnfというのが出て来ますが、クライアント用のCAの設定ファイルをどこかに作っておく必要があるよ、ということです。
CA.sh -newcaなどとして認証局を作っておきましょう。

署名されたクライアント証明書をGlassFishのキーストアにインポートするため,X.509形式に変更

私の環境(OS X 10.9.1)ではコマンドがエラーを返し、原因が分からず行き詰まりました。
結局仮想環境のUbuntuで一連の作業を行い、事無きを得ました。

GlassFishのキーストアに対してクライアント証明書をインポート

ここもはまりました。
インポート先のキーストアがGlassFishのdomainの中のものでなければいけません。

以下の場所にあります。

<GlassFishのインストールディレクトリ>/glassfish-v3.1.2-ml/glassfish/domains/domain1/config/cacerts.jks

GlassFishの設定で、どのキーストアを見るかを変えられそうなのですが、うまくいかなかったです。
またGlassFishのキーストアのデフォルトのパスワードはchangeitです。

コマンドの例を以下に書きます。

keytool -import -alias 証明書別名 -keystore <GlassFishのインストールディレクトリ>/glassfish-v3.1.2-ml/glassfish/domains/domain1/config/cacerts.jks -file インストールするクライアント証明書のパス

クライアント証明書をブラウザにインポートするためPKCS12形式に変換

補足なし。

以上です。