.
Webサーバー => SSLセキュアWebサーバー構築 > 4.クライアント認証に必要な証明書の作成
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

クライアント認証に必要なクライアント証明書を作成

ここでは不特定多数に公開する WEB サーバーを対象としておりません。独自CA による WEBサイトの暗号化は限られた用途のみに限定する必要があります。

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

クライアント認証に必要な証明書を作成します。認証の際、ユーザーが提示しなければならない証明書です。クライアントが有効な証明書を提示しない限り、Apache はセッションを確立しないため、ツールを利用した総当り攻撃を無効にする事が出来ます。

ここではサーバー管理者が Apche WEBサーバー上で動作する管理ツール、例えば、phpMyAdmin などの WEBインターフェイスを外部ネットワークから接続する際にセキュリティ・レベルを引き上げる目的で利用します。

クライアント証明 署名要求書(CSR)を作成

手順としてはサーバー署名要求と全く同じですが、CAで署名する際の nsCertType が異ります。 ユーザー証明書のカレントディレクトリを /etc/httpd/ssl/users とします。

ディレクトリを作成し、ディレクトリへ移動後、キーファイルと署名要求書を作成

# mkdir /etc/httpd/ssl/users
# chmod og-rwx /etc/httpd/ssl/users
# cd /etc/httpd/ssl/uses
# openssl req -new -keyout web_korogi_key.pem -out web_korogi_req.pem

Using configuration from /var/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
........................++++++
writing new private key to 'privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Aichi]:
Locality Name (eg, city) [Nagoya]:
Organization Name (eg, company) [Creative.Unit.ZERO]:
Organizational Unit Name (eg, section) [Design]:
Common Name (eg, YOUR name) []:www.mydomain.net
Eweb Address []:korogi@mydomain.net

Please enter the following 'extra' attributes

A challenge password []:そのままenter
An optional company name []:そのままenter

Common Nameはサーバー名となります。
この作業で /etc/httpd/ssl/users 下に以下のファイルが生成されます。

../web_korogi_req.pem (クライアント署名要求書(CSR))
../web_korogi_key.pem (クライアント証明書の秘密鍵)

この署名要求書を 安全な方法でCA管理者に渡し証明してもらうことで証明書が発行されます。先ほどのサーバー証明書作成と同じ手順です。

CAによる署名作業

CA管理者の立場で、サーバー管理者の署名要求に対して答えます。ここではCAとWebサーバーは同一ホストで管理しています。セキュリティ上、CAは別のサーバーで行うのが望ましいので実際には署名要求書と証明書をサーバー管理者とCA管理者でやり取りを行います。

先ほどのサーバー証明書と同じ手順でクライアント証明書用の設定ファイルを新規に作成します

/var/ssl/openssl_cliant.cnf

[ usr_cert ]
nsCertType = client, email


# openssl ca -config /var/ssl/openssl_cliant.cnf -in web_korogi_req.pem -out web_korogi_cert.pem

Enter PEM pass phrase:****************
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Aichi'
localityName :PRINTABLE:'Nagoya'
organizationName :PRINTABLE:'Creative.Unit.ZERO'
commonName :PRINTABLE:'www.mydomain.net'
ewebAddress :IA5STRING:'korogi@mydomain.net'
Certificate is to be certified until Jul 7 10:46:50 2002 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

証明書署名要求の内容が正しければ Y
コミットするかに対し Y

この作業でサーバー証明書が CAのデータベースに登録され、サーバー証明書が生成されます。

/etc/httpd/ssl/users/web_korogi_cert.pem

PKCS12形式に変換する

証明書 mail_korogi_cert.pem はこのままユーザーに渡しても取り込むことが出来ません。pkcs12形式に変換します。その前に、CA証明書(公開カギ)をカレントディレクトリにコピーしておきます。

# cp /var/ssl/CA/cacert.pem /etc/httpd/ssl

このCA公開鍵を梱包する形でpkcs12形式のユーザー証明書に変換します。

# openssl pkcs12 -export -in web_korogi_cert.pem -inkey web_korogi_key.pem -certfile ../cacert.pem -name web.cuz.homeip.net -caname cuz.homeip.net -out web_korogi_cert.p12

-name はこの署名請求段階で入力したcommon name で、-caname はCA作成自のcommon nameになります。

nter PEM pass phrase: パスフレーズ
Enter Export Password: 証明書取り込み時に要求されるパスワード
Verifying password - Enter Export Password:

この作業で

/etc/httpd/ssl/users/web_korogi_cert.p12

に変換されます。

このファイルをクライアントがブラウザに取り込む事になります。pkcs12形式の証明書ファイルはNetscape,IE4.0以降での利用が可能です。

この証明書はサーバーとのやりとりに必要な証明書、ユーザーキー、自CA証明書が含まれています。ここで紹介しているポリシーに基づき、この証明書は外部からサーバー管理者が接続する際に利用する証明書となります。

ここまでで作成した書類

ここまでの作業で作成された書類は以下の通りです。

サーバー証明書と秘密鍵
/etc/httpd/ssl/cert.pem
/etc/httpd/ssl/privkey.pem

クライアント認証に必要なユーザー証明書と秘密鍵
/etc/httpd/ssl/users/web_korogi_cert.pem
/etc/httpd/ssl/users/web_korogi_key.pem

管理者が接続時に使用する pkcs12形式証明書
/etc/httpd/ssl/users/web_korogi_cert.pk12

以上が準備できたら、Apache 側で設定を行います。

bottom_mark
ページ最上部
ページ最上部 前のページ