CentOS6でApache + OpenSSL

■設定環境
WEBサーバのFQDN:www.ys-network.info
秘密鍵の鍵長  :2048bit
秘密鍵ファイル(KEYファイル) :/etc/pki/tls/private/
SSLサーバー証明書の署名要求ファイル(CSRファイル):/etc/pki/tls/
SSLサーバ証明書(CRTファイル):/etc/pki/tls/certs/

■概要
1. httpd、mod_sslのインストール
2. 秘密鍵の作成
 2.1 乱数ファイルの作成
 2.2 秘密鍵の作成
3. SSLサーバー証明書を発行するための署名要求(Certificate Signing Request)の作成
4. 自己署名証明書の発行
5. “ssl.conf”の設定
6. httpdサービスの再起動
番外編1
番外編2
番外編3

1. httpd、mod_sslのインストール

構築に必要なパッケージをインストールします
# yum install httpd mod_ssl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
~~~ 省略 ~~~
Dependencies Resolved

====================================================================================
 Package                       Arch     Version                   Repository   Size
====================================================================================
Installing:
 httpd                         x86_64   2.2.15-15.el6.centos.1    updates     813 k
 mod_ssl                       x86_64   1:2.2.15-15.el6.centos.1  updates      87 k
Installing for dependencies:
 apr                           x86_64   1.3.9-3.el6_1.2           base        123 k
 apr-util                      x86_64   1.3.9-3.el6_0.1           base         87 k
 apr-util-ldap                 x86_64   1.3.9-3.el6_0.1           base         15 k
 httpd-tools                   x86_64   2.2.15-15.el6.centos.1    updates      70 k
 mailcap                       noarch   2.1.31-2.el6              base         27 k

Transaction Summary
====================================================================================
Install       7 Package(s)

~~~ 省略 ~~~
Complete!

2. 秘密鍵の作成

事前準備として、作業ディレクトリに移動します。
# cd /etc/pki/tls/

2.1 乱数ファイルの作成

適当なディレクトリ内のファイルから乱数ファイルを作成します。
ここでは、"/var/log/"ディレクトリ内にあるmessages*ログファイルから乱数ファイルを作成してますが
同じものが存在しづらければ、なんだって良いと思います。
# openssl md5 /var/log/messages* > rand.dat
#

先ほど作成した乱数ファイル(rand.dat)ですが、中身はこんな感じになってます。
# cat rand.dat
MD5(/var/log/messages)= 29ef225a57ceae83973ee75ec03e95da
MD5(/var/log/messages-20120325)= d3325291b02e54a79fb38795246a6738
MD5(/var/log/messages-20120401)= 463f677870214b32a36b2ba5b8b62492

2.2 秘密鍵の作成

先ほど作成した乱数ファイルを元にして、秘密鍵を作成します。
# openssl genrsa -rand rand.dat -des3 2048 > /etc/pki/tls/private/www.ys-network.info.key
189 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
........................+++
...................................+++
e is 65537 (0x10001)
Enter pass phrase:適当なパスワードを入力
Verifying - Enter pass phrase:適当なパスワードを再入力

3. SSLサーバー証明書を発行するための署名要求(Certificate Signing Request)の作成

認証局(ベリサイン、サイバートラスト等)に送付するCSRファイルを作成します。
# openssl req -new -key /etc/pki/tls/private/www.ys-network.info.key -out www.ys-network.info.csr
Enter pass phrase for www.ys-network.info.key:秘密鍵のパスワードを入力
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]:Chiyoda-ku
#会社名を入力します。
Organization Name (eg, company) [Default Company Ltd]:ys-network.info.co.,LTD
#部署名を入力します。
Organizational Unit Name (eg, section) []:www.ys-network.info
#最重要項目ですが、サーバのFQDNを入力します。
Common Name (eg, your name or your server's hostname) []:www.ys-network.info
#メールアドレスを入力します。空でOK
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
#パスワードを入力します。空でOK
A challenge password []:
#パスワードを再入力します。空でOK
An optional company name []:

以上で、認証局に送付するCSRファイルが作成されました。
その後、認証局から届いたSSLサーバ証明書(CRTファイル)を”/etc/pki/tls/certs/”ディレクトリに保存したら
5. “ssl.conf”の設定の手順で大丈夫ですが、自宅サーバなど費用の問題で自己認証局を使用して発行する場合
4. 自己署名証明書の発行の手順が必要です。

4. 自己署名証明書の発行

10年間有効の自己署名証明書(CRTファイル)を発行します。
# openssl req -x509 -in www.ys-network.info.csr -key /etc/pki/tls/private/www.ys-network.info.key -out /etc/pki/tls/certs/www.ys-network.info.crt -days 3650
Enter pass phrase for /etc/pki/tls/private/www.ys-network.info.key:秘密鍵のパスワードを入力
#

5. “ssl.conf”の設定

秘密鍵やSSLサーバ証明書を指定します。
# vi /etc/httpd/conf.d/ssl.conf

修正前
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
修正後
SSLCertificateFile /etc/pki/tls/certs/www.ys-network.info.crt

修正前
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
修正後
SSLCertificateKeyFile /etc/pki/tls/private/www.ys-network.info.key


認証局が発行したSSLサーバ証明書を使用した場合、中間CA証明書とクロスルート証明書の設定が必要です。
ベリサインの場合、各証明書はここにあります
修正前
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
修正後
SSLCertificateChainFile /etc/pki/tls/certs/www.ys-network.info-chain.crt

6. httpdサービスの再起動

上記設定の変更を反映させるためにhttpdサービスを再起動します
# /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

番外編1

このままだと、httpdサービスを再起動する度に秘密鍵のパスワードを求められますが
以下を行えばパスワードを求められなくなります。セキュリティ上望ましくはありませんが・・・
# openssl rsa -in /etc/pki/tls/private/www.ys-network.info.key -out /etc/pki/tls/private/www.ys-network.info-nopass.key
Enter pass phrase for /etc/pki/tls/private/example.key:秘密鍵のパスワードを入力
writing RSA key

番外編2

httpdサービスを再起動すると、サービスは起動するけど以下のようなエラーが出る場合があります。
# /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [OK]
httpd を起動中: httpd: apr_sockaddr_info_get() failed for www.ys-network.info
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]


上記は、httpd.confの"ServerName"が未入力の為です。
# vi /etc/httpd/conf/httpd.conf

修正前
#ServerName www.example.com:80
修正後
ServerName www.ys-network.info:80

番外編3
ブラウザがFirefoxの場合、自己署名証明書のSSLサイトにアクセスしてエラーが出ても例外サイトに追加すると
次からはエラーが表示されなくなりますが、何かしらの理由で再表示するようにするには以下の通りです。
メニューバーの[ツール]→[オプション]で設定ウインドウを表示し、[詳細]の[暗号化]タブ内の
[証明書を表示]ボタンをクリックすると、証明書一覧があるので、[サーバ証明書]から該当する証明書を削除し
ブラウザを再起動すると、エラーが表示されるようになります。

ブラウザにインポートされた証明書一覧

ブラウザにインポートされた証明書一覧

================================
検証環境
OS:CentOS6.2(64bit)
apache:httpd-2.2.15-15.el6.centos.1.x86_64
mod_ssl:mod_ssl-2.2.15-15.el6.centos.1.x86_64

DSAとRSA・・・暗号方式の違い。今は暗号強度が高いRSAが主流。
CSR(Certificate Signing Request)・・・認証局にSSLサーバー証明書を発行してもらうのに必要
CRT・・・上記CSRファイルを元に、認証局が送ってくるファイル。SSLサーバ証明書

コメント

  1. […] サーバの自己証明書作成 […]