スマートデバイスアプリ開発のあれやこれや

Mac標準のApacheでクライアント認証環境を構築する

前回はSSL環境を構築しました。

今回は前回の内容を踏まえてクライアント認証環境の構築方法をまとめようと思います。
前提環境は前回と同じです。

1. 認証局(CA)の秘密鍵と証明書署名要求を作成する

クライアント認証環境実現のポイントは,
サーバ証明書作成のコマンド実行時に「認証局証明書」と「秘密鍵」を指定する点です。

そのため,前回作成していない認証局秘密鍵と証明書署名要求を作成します。
出力するファイル名が異なるだけで,コマンド内容はサーバ証明書を作ったときと同じです。

openssl req -new -keyout ca.key -out ca.csr -rand rand.dat


前回は秘密鍵と証明書署名要求を分けて作成しましたが,
以上のようなコマンドを実行することで同時に作成することも可能です。

なお,サーバ証明書を作成した時と同様に
国情報や市区町村の情報の入力を求められるので前回同様に入力します。

2. 認証局の証明書を作成する

認証局秘密鍵認証局の証明書署名要求を元に認証局用の証明書を作成します。

openssl x509 -req -signkey ca.key -in ca.csr -days 365 -sha1 -out ca.crt

生成された認証局証明書は,apacheからアクセス出来る場所
(例: /private/etc/apache2以下)に置いておきましょう。

3. サーバ証明書を作成する

クライアント認証を行う場合,サーバ証明書認証局証明書と紐づくので
新しく作りなおす必要があります。

必要なファイルは以下の通りです。

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -sha1 -in server.csr -out server.crt

生成されたサーバ証明書は,apacheからアクセス出来る場所
(例: /private/etc/apache2以下)に置いておきましょう。

4. クライアント証明書を作成する

正規ユーザに配布するクライアント証明書を作成します。
必要なファイルは以下の通りです。

  • サーバの秘密鍵(server.key)
  • サーバの証明書(server.crt)
  • 認証局の証明書(ca.crt)
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca.crt -out server.p12

opensslの「pkcs12」コマンドは,証明書と秘密鍵をまとめて
.p12型式で出力する機能を提供しています。

これでクライアント証明書(server.p12)ファイルが生成されます。
このファイルを正規のユーザに配布してください。

5. apacheの設定を変更する

SSL環境構築時に編集した「httpd-ssl.conf」ファイルを再び編集します。

sudo vi /private/etc/apache2/extra/httpd-ssl.conf

編集する箇所は以下の通りです。

#SSLCACertificateFile "/private/etc/apache2/ca.crt"
↓
SSLCACertificateFile "/private/etc/apache2/ca.crt"

#SSLVerifyClient require
#SSLVerifyDepth  1
↓
SSLVerifyClient require
SSLVerifyDepth  1

1点目の変更では,認証局用の証明書をApacheに認識させます。
2点目の変更では,クライアント確認処理を有効にして
クライアント証明書の存在チェックする認証局証明書の数を指定します。
(今回はca.crt単体なので,1を指定すれば良いです)

変更を保存したら,Apacheを再起動しましょう。

sudo apachectl restart

6 結果確認

では,「https://localhost」にアクセスしてみましょう。
クライアント証明書を選択するダイアログが表示されれば成功です。