サーバ証明書の作成
おやじは、WWWおよびメールでSSLを使用していますが、そのためのSSL証明書をそれぞれで作成していましたが、面倒くさいので、一連の手順で作成するようにしました。ベースとなるのは、Apacheでの作成方法です。
■サーバ証明書の作成
ここでは、通信の暗号化が目的なので自分がCAになって自己認証でサーバ証明書を作成しています。基本的な手順は、Apacheのマニュアルに従っています。
◆ 事前準備
前準備として、サーバ証明書作成の最終段階でmod_ssl付属のsign.shコマンドを使用しますので、
こちらからmod_sslの最新版をダウンロードし、任意の場所に展開だけしておきます。おやじがダウンロードしたのは、mod_ssl-2.8.11-1.3.27.tar.gzです。展開後、pkg.contrib配下にsign.shがあることを確認しておきます。
また、以降はopensslのコマンドを使って、鍵や証明書を所定の場所(ここでは、/usr/local/certs)に作成していきますので、opensslへのパスが通っていることが前提になりますが、RedHatなら問題ありません。鍵や証明書を作成するディレクトリを作成し、移動します。
更に、鍵作成時に使用する乱数データ(rand.dat)を(ここでは、Apache(/usr/local/apache2)のconfディレクトリ配下のファイルを使用)作成しておきます。
$ tar zxfv
mod_ssl-2.8.11-1.3.27.tar.gz $ ls mod_ssl-2.8.11-1.3.27/pkg.contrib ........(省略).......
sign.sh..... $ su # mkdir /usr/local/certs # cd
/usr/local/certs #
openssl dgst -md5 ../apache2/conf/* >
rand.dat
|
■Apache用証明書の作成
まず、Apache用の証明書を作成します。以下、/usr/local/certsディレクトリで作業します。
[注意]: サーバ証明書を作成する場合、以下の2点を守らないと失敗するので注意が必要です。
- CA用秘密鍵とサーバ用秘密鍵のパスフレーズは異なるものを使用すること。
- CA証明書とサーバ証明書のON(Organization Name)は、異なる名称とすること。
◆ CA用秘密鍵(ca.key)の作成
自分でサーバ証明書を発行するため、乱数データ(rand.dat)を使用してCA用の鍵を作成します。
#openssl genrsa -des3 -out
ca.key -rand rand.dat 1024 718 semi-random bytes
loaded Generating RSA private key, 1024 bit long
modulus ........+++++ ......................................+++++ e
is 65537 (0x10001) Enter PEM pass phrase:xxxxx ← CA用パスフレーズ入力 Verifying password - Enter PEM
pass phrase:xxxxx
← CA用パスフレーズ再入力
|
◆ CA用証明書(ca.crt)の作成
CA用証明書として、ca.crtを作成します。
# openssl req -new -x509
-days 365 -key ca.key -out ca.crt Using configuration from
/usr/share/ssl/openssl.cnf Enter PEM pass phrase:xxxxx ← CA用パスフレーズ入力 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) [GB]:JP (国コード) State or Province Name (full name)
[Berkshire]:Tokyo (都道府県名) Locality Name (eg, city) [Newbury]:Edogawa (市町村名) Organization Name (eg, company) [My Company
Ltd]:Private_CA (組織名) Organizational Unit Name (eg, section)
[]:Admin (組織内ユニット名) Common Name (eg, your name or your server's hostname)
[]:www.aconus.com (サーバ名) Email Address
[]:oyaji@www.aconus.com (管理者メールアドレス) |
◆ サーバ用秘密鍵(server.key)の作成
サーバ用秘密鍵を作成しますが、ここではRSA鍵を生成し、暗号化アルゴリズムはDES3、鍵長1024ビットで指定しています。
# openssl genrsa -des3 -out
server.key -rand rand.dat 1024 718 semi-random bytes
loaded Generating RSA private key, 1024 bit long
modulus ..................+++++ .............+++++ e is
65537 (0x10001) Enter PEM pass phrase:yyyyy ← サーバ用パスフレーズ入力 Verifying password - Enter PEM
pass phrase:yyyyy
← サーバ用パスフレーズ再入力
|
◆ サーバ用公開鍵(server.csr)の作成
ここでは、CAに送るデジタル証明書のリクエストファイルを作成します。
# openssl req -new -key server.key -out
server.csr Using configuration from
/usr/share/ssl/openssl.cnf Enter PEM pass phrase:yyyyy ← サーバ用パスフレーズ入力 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) [GB]:JP (国コード) State or Province Name (full name)
[Berkshire]:Tokyo (都道府県名) Locality Name (eg, city) [Newbury]:Edogawa (市町村名) Organization Name (eg, company) [My Company
Ltd]:www.aconus.com (組織名) Organizational Unit Name (eg, section)
[]:Admin (組織内ユニット名) Common Name (eg, your name or your server's hostname)
[]:www.aconus.com (ホスト名:*) Email Address
[]:oyaji@mail.aconus.com (管理者メールアドレス)
Please enter the following
'extra' attributes to be sent with your certificate request A
challenge password []: ← Enterのみ入力 An optional company name []: ←
Enterのみ入力 |
*: ここのホスト名は、必ずhttp://・・・・でアクセスするホスト名とすること。
◆ サーバ用秘密鍵(server.key)からのパスフレーズの削除
上記サーバ用秘密鍵のまま、SSL起動すると起動するたびにパスフレーズの入力が必要であり、セキュリティ上は好ましくありませんが、停電からの自動再起動時等は起動できなくなりますので、秘密鍵からパスフレーズを削除します。
# cp server.key
server.key.bak # openssl rsa -in server.key.bak -out
server.key read RSA private key Enter PEM pass
phrase:yyyyy
←
サーバ用パスフレーズ入力 writing
RSA private key |
◆ サーバ用証明書(server.crt)の作成
予め用意しておいた、mod_ssl付属のsign.shスクリプトでサーバ用デジタル証明書を作成します。
#
/usr/local/src/mod_ssl-2.8.11-1.3.27/pkg.contrib/sign.sh
server.csr CA signing: server.csr -> server.crt: Using
configuration from ca.config Enter PEM pass phrase:xxxxx ← CA用パスフレーズ入力 Check that the request matches
the signature Signature ok The Subjects Distinguished Name is as
follows countryName :PRINTABLE:'JP' stateOrProvinceName
:PRINTABLE:'Tokyo' localityName
:PRINTABLE:'Edogawa' organizationName
:PRINTABLE:'aconus.com' organizationalUnitName:PRINTABLE:'Admin' commonName
:PRINTABLE:'www.aconus.com' emailAddress
:IA5STRING:'oyaji@mail.aconus.com' Certificate is to be certified
until Oct 10 13:09:20 2003 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 CA verifying:
server.crt <-> CA cert server.crt:
OK |
◆ CA証明書をブラウザにインポートするためのca.derファイルの作成
CA証明書をブラウザにインポートするためのderファイルを、以下で作成します。このca.derファイルを
こちらの手順でブラウザにインポートします。
# openssl x509 -inform pem
-in ca.crt -outform der -out ca.der |
■メール用証明書の作成
上記でApache用の証明書が作成できますが、これを利用して以下の手順でメール用の証明書を作成します。
◆ メール用証明書(mail.pem)の作成
メール用証明書(mail.pem)を、証明書と鍵から作成します。
# (cat server.crt ; cat
server.key) > mail.pem |
◆ クライアント用証明書の作成
サーバ証明書をクライアントにインストールしておかないと、使用できないわけではありませんが接続のたびに怒られます。敢えて作成する必要はなく、Apche用に作成したca.derをクライアントの信頼できる証明機関にインストールすればこの問題は解消します。
■各ファイルの所有権の変更
作成後、所有者(root)以外アクセスできないよう、モードを変更しておきます。
# chmod -c -R 400 server.*
ca.* rand.dat mail.pem |
Top Pageへ サーバの構築へ戻る