クライアント証明書を作成する ~ OpenSSL
クライアント認証に使用する証明書を作成します。この証明書を持たないユーザーは Apache Webサーバーが指定したディレクティブへのアクセスを制限する事が出来ます。この作業はサーバー管理者の立場で行います。
openssl.cnf の編集
[ usr_cert ]セクションの nsCertType を以下の様に変更します。手順はサーバー証明書を作成した時と同じですが、usr_cert セクションの nsCertType が異なります。サーバー証明書を作成した時に server にしているので、client, email に修正します。
# vi /etc/pki/tls/openssl.cnf
/etc/pki/tls/openssl.cnf
[ usr_cert ]
# nsCertType = server
nsCertType = client, email
署名要求書の作成
openssl.cnf を修正後、OpenSSL を使って署名要求書を作成します。
# mkdir /etc/pki/httpd/client
# cd /etc/pki/httpd/client
# openssl req -new -keyout cliant_key.pem -out cliant_newreq.pem
Generating a 2048 bit RSA private key
....+++
...+++
writing new private key to 'cliant_key.pem'
Enter PEM pass phrase:★任意のパスワード
Verifying - Enter PEM pass phrase:
-----
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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:korogi
Organizational Unit Name (eg, section) []:design
Common Name (eg, your name or your server's hostname) []:hogehoge.net そのままEnter
Email Address []: そのままEnter
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: そのままEnter
An optional company name []: そのままEnter
この作業で以下のファイルが作成されます。
- /etc/pki/httpd/client/cliant_key.pem …署名要求書(CSR)
- /etc/pki/httpd/client/cliant_newreq.pem … 秘密鍵
署名要求書(CSR)の署名手続き
サーバー証明書を作成した時にCA管理者が署名した時と同じ手順でCSRに署名します。
# cd /etc/pki/httpd/client
# openssl ca -policy policy_anything -days 3650 -out cliant_newcert.pem -infiles cliant_newreq.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem: ← CAパスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 11111202396091507201 (0x9a32ebb5a680e201)
Validity
Not Before: Aug 1 13:53:42 2014 GMT
Not After : Jul 29 13:53:42 2024 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Tokyo
organizationName = korogi
organizationalUnitName = design
commonName = hogehoge.net
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE ← ここがポイント
Netscape Cert Type:
SSL Client, S/MIME ← ここがポイント
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D9:0A:CC:3D:61:99:DF:95:68:68:5D:DD:E1:1E:88:2A:79:FC:DE:38
X509v3 Authority Key Identifier:
keyid:10:C3:31:07:EC:30:F0:8A:41:4A:75:03:D6:29:92:A5:B6:44:5B:91
Certificate is to be certified until Jul 29 13:53:42 2024 GMT (3650 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
この作業で以下のファイルが作成されます。
- /etc/pki/httpd/client/cliant_newcert.pem
PKCS12形式に変換する
cliant_newcert.pem をWindowsに取り込める形式で、CAの公開カギとサーバー鍵を含む形で pkcs12形式に変換します。
# openssl pkcs12 -export -in cliant_newcert.pem -inkey cliant_key.pem -certfile /etc/pki/CA/cacert.crt -name hogehoge.net -caname hogehoge.net -out cliant_cert.p12
- -name はこの署名請求段階で入力したcommon name になります。
- -caname はCA作成自の common name になります。
Enter pass phrase for cliant_key.pem: ←cliant_key.pemのパスフレーズ
Enter Export Password: ←pkcs12形式の証明書をインポートとするときに止められるパスワード
Verifying - Enter Export Password: ←上記パスワードの確認
以上で以下が作成されます。
- /etc/pki/httpd/client/cliant_cert.p12
このファイルをUSBメモリ等で、クライアント認証の利用を認めたい特定のユーザー、ここでは、このサーバーの管理者のことですが、Windows クライアントにインストールしてもらいます。
Apache でクライアント認証を有効にしたディレクティブにアクセスした場合、この証明書を提示しなければ接続が出来ないクライアント認証が可能になります。引き続き、具体的な設定手順について説明します。
以下のようにしても同様の結果が得られます。
# openssl pkcs12 -export -inkey cliant_key.pem -in cliant_newcert.pem -out cliant_cert.pfx
Enter pass phrase for cliant_key.pem: クライアント証明書のパスフレーズ
Enter Export Password: 取り込み時に求められるパスワード(任意)
Verifying - Enter Export Password: 上記パスワードの再入力
次のページに続きます。
目次 4 / 6