サーバ証明書の作成


おやじは、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.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へ   サーバの構築へ戻る