公開日: 2012年8月11日 13:07:47
最終更新: 2012年9月22日 13:38:23

クライアント証明書の発行

クライアント証明書の発行

クライアント証明書がインストールされている端末(と言うかブラウザ)のみアクセスを許可する、セキュアなサイトが構築できます。eTAX やオンラインバンキングなどで使われています。

クライアント秘密鍵の作成

CAの秘密鍵を作ったときやサーバ証明書を作ったときと同じです。
鍵の長さは 2048bit にします。

クライアントの秘密鍵が作成されました。

秘密鍵からx509証明書発行要求(CSR)を作成

CN にはクライアントの識別子になるので一意になるような値を入れてください。こうしてできた x509 証明書発行要求が client.csr です。

CSRにCAが署名してクライアント証明書を発行

証明書発行要求と秘密鍵をもとに、プライベート CA に署名をもらいます。

証明書の内容について表示され、これでいいか確認を聞かれます。よければ[y]で許可しましょう。 こうしてできた client-ca.crt がプライベートCAによって署名されたクライアント証明書になります。

クライアント証明書をpkcs12でexportする

鍵と証明書を安全にexportするために、pkcs12という方法で鍵と証明書をひとつにまとめます。鍵と証明書を結合してopensslに放り込んでやればOKです。

ここで設定するパスワードはpkcs12を展開するときのパスワードです。このパスワードは Windows に pkcs12 のファイルを持ってきたときに、展開するために必要になります。こうして client.p12 という pkcs12 形式の鍵ペアができました。

あとは winscp や usbメモリなどで作成した client.p12 を Windows クライアントにコピーします。

なお、今回はCAの証明書については前回のサーバ証明書でインポート済みなので入れていませんが、実際にプライベートCAの運営で証明書を配布していくときはCAの証明書もつけてあげないといけません。CAの証明書は接続先のサーバ証明書の署名検証するために必要になります。CAの証明書もつけるときはこんな感じでOKです。

pkcs12はそもそも複数の鍵や証明書をひとつにしてインポートするためにあるので、この方法を使えばいくらでも証明書をくっつけることができます。RootCAまでのchainとかをこの方法でまとめるといいと思います。

Apacheの設定

Apache の設定は conf/extra/httpd-ssl.conf を編集します。

# https アクセス時のクライアント証明書の扱いを指定します。
# require => クライアント証明書は必須
# optional => クライアント証明書は持っていてもいなくてもよい
# none => クライアント証明書は不要(持っていても無視)
# optional_no_ca => optional と同じだが、CAの証明が無くても許可
SSLVerifyClient require

Apache を再起動すると、SSL サイトでクライアント認証が有効になります。