- 11.1. DIGEST認証
- 11.2. FORM認証
- 11.3. HTTPS
- 11.4. プライベートCAの設立とユーザ証明書の作成
- 11.5. CLIENT-CERT認証
11.4. プライベートCAの設立とユーザ証明書の作成
CLIENT-CERT認証はSSLのクライアント認証を利用した認証方式です。信頼できるCA(Certification Authorigy: 認証局)によって署名された個人証明書を持つユーザで、かつ特定のユーザに対してアクセスを許可する方式です。基本的にVerisignなどの有名なCAによって署名された個人証明書がなければこの認証方式は利用できないのですが、プライベートCA(個人的に設立したCA)によって試すことも可能です。ここではまず、プライベートCAを用いて個人証明書を発行する方法について説明します。
プライベートCAを扱うソフトとしては、Linuxではopensslがあります。WindowsにもEasyCertというものがあります。ここではopensslを用いた方法について説明します。まず始めにプライベートCAを設立する準備として、以下のコマンドを実行してください。
$ mkdir demoCA $ mkdir demoCA/private $ mkdir demoCA/newcerts $ touch demoCA/index.txt $ echo 01 > demoCA/serial
次にプライベートCA自身の鍵と証明書を作成します。opensslコマンドを用いて以下のようにします。
$ openssl req -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -new -x509
「-keyout」オプションで秘密鍵を、「-out」オプションで証明書の出力先を指定しています。他のファイル名でも構わないのですが、例のようにしておくと、以降に実行するコマンドで、CAの秘密鍵・証明書を指定しなくて済みます。その方が楽ですので、例と同じにして下さい。
「-x509」オプションは、ITU-T「X.509」に定められたフォーマットで、証明書の出力を行うことを指定しています。X.509に従った証明書は、署名情報と公開鍵の両方を含んでいます。
コマンドを実行すると、最初にパスワードの入力が求められます。これは秘密鍵にアクセスする際に求められるパスワードになりますので、忘れないようにして下さい。
Using configuration from /usr/share/ssl/openssl.cnf Generating a 1024 bit RSA private key ................++++++ ..........................++++++ writing new private key to 'demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
パスワードの入力が終了すると、キーストアにサーバの証明書を作成した時と同じように、署名情報の入力が求められます。この情報も任意で構わないのですが、2つ目に入力する「State or Province Name(都道府県)」と4つ目に入力する「Organization Name(組織名)」は覚えておくようにして下さい。ユーザ証明書に署名する上で重要な情報となります。
----- Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Kyoto Locality Name (eg, city) [Newbury]:Shimogamo Organization Name (eg, company) [My Company Ltd]:4dd Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:4dd.co.jp Email Address []:
以上でプライベートCAの準備は完了です。続いてユーザ証明書の作成について説明します。ユーザ証明書はプライベートCAに署名してもらう必要がありますので、プライベートCAの証明書作成とは少し異なります。以下のようにして下さい。
$ openssl req -keyout user.pem -out user.cer -new
コマンドを実行すると、プライベートCAの証明書作成と同じく、最初に、秘密鍵にアクセスする際のパスワードを設定します。
Using configuration from /usr/share/ssl/openssl.cnf Generating a 1024 bit RSA private key .......................................++++++ ............................................++++++ writing new private key to 'user.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
パスワードの設定が終了しますと、これもプライベートCAの場合と同じく、署名情報の入力が求められます。ここで注意点ですが、2つ目の「State or Province Name」と4つ目の「Organization Name」は、プライベートCAのものと同じにして下さい。プライベートCAは、これら2つの情報が同じである証明書に対してしか、署名できないという制約があります。また3つ目の「Locality Name」も指定しません。これはプライベートCAによる署名の際、この情報が抜け落ちることがあるためです。
----- Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Kyoto Locality Name (eg, city) [Newbury]:. Organization Name (eg, company) [My Company Ltd]:4dd Organizational Unit Name (eg, section) []:developing Common Name (eg, your name or your server's hostname) []:Hatanaka Email Address []:
ここまではプライベートCAの場合と全く同じですが、最後にチャレンジパスワードを設定します。これはSSLのクライアント認証の際、サーバに対して送られるパスワードです。CLIENT-CERTにおいて重要ですので、忘れないようにして下さい。「An optional company name」は、何でも構いません。
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Akihiro An optional company name []:
これでユーザ証明書(正確には「証明書のリクエスト」)が作成できました。続いてプライベートCAで作成した証明書に署名します。
$ openssl ca -in user.cer -out user.crt
「-in」オプションでリクエストファイル、「-out」オプションで署名済みファイルを指定します。このコマンドを実行すると、始めに「プライベートCA」の秘密鍵へアクセスするためのパスワードが求められます。パスワードが正しいと、以下のようにユーザの署名内容が表示され、これに対して署名を行うかどうか確認が求められます。「y」を入力していくと、署名済みファイルが作成されます。
The Subjects Distinguished Name is as follows countryName :PRINTABLE:'JP' stateOrProvinceName :PRINTABLE:'Kyoto' organizationName :PRINTABLE:'4dd' organizationalUnitName:PRINTABLE:'developing' commonName :PRINTABLE:'Hatanaka' Certificate is to be certified until Nov 26 09:48:18 2004 GMT (365 days) Sign the certificate? [y/n]:y
証明書に署名がされましたので、後はIEなどのブラウザに読み込めるフォーマットに変換するだけです。ブラウザにユーザ証明書として読み込んでもらうためには、「PKCS#12」というフォーマットにする必要があります。PKCS#12フォーマットは証明書と秘密鍵を両方とも保持するフォーマットです。PKCS#12フォーマットに変換するためには、以下のように2回opensslのコマンドを実行します。
$ openssl x509 -in user.crt -out user.x509 $ openssl pkcs12 -export -inkey user.pem -in user.x509 -out user.p12
1つ目のコマンドで、署名ファイルをX.509に従ったファイルに変換します。その後、2つ目のコマンドでPKCS#12に従ったファイルに変換します。PKCS#12は証明書と秘密鍵の両方を保持しますので、入力には両方のファイルが指定されます。なお2番目のコマンドを実行すると、まずはじめに「ユーザ」の秘密鍵にアクセスするためのパスワードが求められます。その後、再びパスワードの入力が求められますが、これはPKCS#12フォーマットのファイルに設定するパスワードです。ブラウザでこのファイルを取り込む際に、入力が求められます。
以上でユーザ証明書の作成は終了です。最後にできた証明書をブラウザに取り込みます。IEの場合は、PKCS#12フォーマットのファイルをダブルクリックすると、「証明書のインポート ウィザード」が実行されます。途中でパスワードを求められますが、ここでファイルに設定したパスワードを入力すると、インポートが実行されるはずです。正しくインポートされると、以下のように「証明書」ダイアログの「個人」のところに、作成した証明書が表示されます。証明書ダイアログは、「インターネットオプション」の「コンテンツ」にあります。
(実習課題4)
プライベートCAを作成し、自分で作成したユーザ証明書に署名を行いなさい。
また署名したユーザ証明書をブラウザに取り込みなさい。