サーバー証明書を作成する ~ OpenSSL
引き続き、Apache WebサーバのSSL化に必要なサーバー証明書をCA(第三者)に署名してもらう形で作成します。ここでの OpenSSLの操作は、サーバー管理者の立場で操作することになります。
ここでは Apache Webサーバーを例に紹介していますが、同一ホストの場合であれば、Mail や FTPサーバーにもサーバー証明書を流用します。サブドメインでそれぞれに証明書を配置するより、同一ホストであればサーバー証明書を共有した方が、保守管理の面で良いと思います。
Apaceh2 SSL化までの流れ
サーバー管理者が Apache WebサーバーのSSL化を行うにあたり、SSL化に必要な証明書を入手する必要があります。その流れは以下のようになります。
- 署名要求書を作成する
- 作成した署名要求書をCA管理者に提出する
- CA管理者が証明書を発行しサーバー管理者に返却する
- 受け取った証明書でサーバー管理者がSSLに関する設定を行う
3はCA管理者が、それ以外はサーバー管理者が行う作業ですが、ここでは同一ホストの同じ管理者が作業を行うので実際は一人ですので、今、自分は誰の立場で作業をしているか、ということを意識する点がポイントです。
サーバー証明書の作成(Webサーバー管理者)
Apache Webサーバーを例に説明します。今度は、Webサーバー管理者の立場で OpenSSL を操作する事になります。
openssl.cnf の編集
openssl.cnf の [ usr_cert ] セクションを以下の様に修正します。
# vi /etc/pki/tls/openssl.cnf
/etc/pki/tls/openssl.cnf
[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = server
署名要求書(CSR)とサーバー秘密鍵の作成
クライアント認証に対応した証明書を作成するには、CA(認証局)に提出するリクエストファイルを作成する必要があります。
提出と言っても同じホストであり、自分で作ったCAですから、第三者ではありませんが、同じOpenSSLコマンドを使う以上、今、自分が誰の立場で作業してるかを意識しながら作業することがポイントではないかと思います。
必要となるCA署名付きの証明書を作成します。証明書を配置する任意のディレクトリ /etc/httpd/cert を掘ってそこへ移動します。
# mkdir /etc/pki/httpd
# cd /etc/pki/httpd
# openssl req -new -nodes -keyout newkey.pem -out newreq.pem
Generating a 2048 bit RSA private key
.................................................................+++
..............................+++
writing new private key to 'newkey.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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:CUZ ★CAとは違う名前にする
Organizational Unit Name (eg, section) []:design
Common Name (eg, your name or your server's hostname) []:hogehoge.net ★使用するサーバーと同じにする
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/newkey.pem … Webサーバーの秘密鍵
- /etc/pki/httpd/newreq.pem … Webサーバーの署名要求書(CSR)
ここでサーバ管理者が作成した署名リクエストファイル newreq.pem を第三者である CA(認証局)に提出します。
補足:-nodes をつけ忘れるとパスフレーズを求められます。サーバーを起動する度にパスフレーズが求められるので、-nodes オプションをつけます。セキュリティ面で一段、引き下げる事になりますが、システムをリブブートする際に必要になるので、利便性からこの様にしています。また、この処理は CA.pl でいうところの -newreq-nodes を指定するのと同じです。
署名要求書(CSR)の署名手続き
第三者と言っても同一ホストの一人二役を行いますので、今度はCA管理者の立場で、サーバー管理者から手渡された署名リクエストファイル(CSR) newreq.pem に署名する手続きを行います。
署名要求書(CSR)の署名手続き
openssl_server.cnf の準備が出来たら、今し方 Webサーバー管理者が作成した署名要求書(CSR) newkey.pem を CA管理者に手渡した、と仮定し、今度はCA管理者の立場で著名作業を行い証明書を発行します。
# cd /etc/pki/httpd
# openssl ca -policy policy_anything -days 3650 -out newcert.pem -infiles newreq.pem
有効期限を10年に設定しています。指定しない場合は365日になります。この処理は CA.pl -sign と同じ処理になります。
# openssl ca -policy policy_anything -days 3650 -out newcert.pem -infiles 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: 11111202396091507200 (0x9a32ebb5a680e200)
Validity
Not Before: Aug 1 13:29:45 2014 GMT
Not After : Jul 29 13:29:45 2024 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Tokyo
organizationName = CUZ
organizationalUnitName = design
commonName = hogehoge.net
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
37:87:80:B3:AE:ED:AA:D3:F2:2C:9D:16:4C:9F:6D:E4:FE:CF:CF:66
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:29:45 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
この作業で署名済みのサーバー署名書 newcert.pem が作成されます。
- /etc/pki/httpd/newcert.pem
再度、署名をやり直す場合
CA管理者が、1度署名したCSRの署名作業を再度やり直した場合、以下のようなメッセージが表示されます。
failed to update database
TXT_DB error number 2
この場合、今し方、署名して作成した証明書の失効手続きを行い Data Base をアップデートする必要があります。
# openssl ca -revoke /etc/pki/httpd/newcert.pem
これで再度、同じCSRファイルに対して署名手続きが行えます。
引き続き、クライアント証明書を作成を作成します。
目次 3 / 6