SSLを使ってセキュアなWebページを作成するための方法を見ていきます。
ApacheからSSLを使用する
ApacheでSSLを利用するには以下のソフトウェアが必要です。
ソフトウェア | 概要 |
---|---|
OpenSSL | SSLを利用するために必要なソフトウェア |
mod_ssl | OpenSSLを使ってApacheをSSLに対応させるモジュール |
以降、それぞれのソフトウェアのインストール方法から見ていきます。
OpenSSLのインストール
OpenSSLはCentOSをデフォルト設定でインストールした場合は既にインストールされています。まず、OpenSSLがインストールされているかどうか確認しましょう。
# rpm -qa | grep openssl openssl-1.0.1e-42.el6.i686
上記のようにgrepの結果が出力されれば、既にインストールされています。もし、何も出力されていなければインストールされていません。その場合は、以下コマンドでインストールします。
# yum install openssl
OpenSSLのバージョンも確認しておきましょう。
# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013
mod_sslのインストール
mod_sslはOpenSSLを使ってApacheをSSLに対応させるモジュールです。Apacheのモジュールもyumを使用してインストールできます。
# yum install mod_ssl Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: ftp.jaist.ac.jp * extras: ftp.jaist.ac.jp * updates: ftp.jaist.ac.jp Setting up Install Process ~ 省略 ~ Installed: mod_ssl.i686 1:2.2.15-47.el6.centos Complete!
インストールされたかどうか以下コマンドで確認します。
# rpm -qa | grep mod_ssl mod_ssl-2.2.15-47.el6.centos.i686
grepの結果が出力されれば、無事にインストールされています。
サーバー証明書の作成
ApacheでSSLを使えるようにするためには、サーバー証明書を作成しApacheに組み込む必要があります。証明書の作成はOpenSSLのコマンドを使用します。
# cd /etc/pki/tls/certs/ # make server.crt umask 77 ; \ /usr/bin/openssl genrsa -aes128 2048 > server.key Generating RSA private key, 2048 bit long modulus .......+++ ..+++ e is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase: umask 77 ; \ /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0 Enter pass phrase for server.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) []:Aichi Locality Name (eg, city) [Default City]:Nagoya Organization Name (eg, company) [Default Company Ltd]:Person Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:www.test.com Email Address []:test@test.com
これで秘密鍵「server.key」とサーバー証明書「server.crt」が作成されました。ただ、このままでは秘密鍵を使用する都度、パスフレーズが要求されます。つまり、Apacheの起動の際、毎回パスフレーズを入力しないといけません。セキュリティ上の観点からはこのままの方が望ましいですが、ここでは秘密鍵のパスフレーズを解除します。
# mv server.key server.key.bak # openssl rsa -in server.key.bak -out server.key Enter pass phrase for server.key.bak: writing RSA key
これで、パスフレーズは解除されました。
秘密鍵「server.key」とサーバー証明書「server.crt」が同じディレクトリに保存されていますが、管理上、秘密鍵は以下のディレクトリに移動させます。
# mv /etc/pki/tls/certs/server.key /etc/pki/tls/private/server.key
ApacheにSSL設定をする
サーバー証明書と秘密鍵を生成したら、それらをApacheに組み込む作業を行ないます。SSLに関する設定は「/etc/httpd/conf.d/ssl.conf」に記述することにします。
# cd /etc/httpd/conf.d/ # vi ssl.conf ~ 省略 ~ Listen 443 ~ 省略 ~ <VirtualHost _default_:443> ServerName www.sample.com:443 SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/private/server.key ~ 省略 ~ </VirtualHost>
「<VirutalHost _default_:443>」というように記述すると、他の仮想ホスト設定に該当しないリクエストをすべてここで受け付けるようになります。
サーバー証明書と秘密鍵のパスはそれぞれ以下ディレクティブで指定します。
SSLCertificateFile | SSLサーバ証明書の保存ディレクトリ |
---|---|
SSLCertificateKeyFile | 秘密鍵の保存ディレクトリ |
以上で「ssl.conf」の設定は完了です。
あとはApacheを再起動させ、設定を反映させます。
# /sbin/service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
httpsでテストページにアクセスする
早速、SSLのWebサーバーに接続してみます。プロトコルはhttpのかわりにhttpsを指定します。
正式なサーバー証明書ではない旨のメッセージが表示されます。本来、証明書はCAで証明されたものを使用する必要がありますが、今回は自分で署名をする証明書(オレオレ証明書)を使っているので、この警告が出力されます。
「このサイトの閲覧を続行する」をクリックし、次に進めます。
Webページが表示されれば、httpsでのアクセスに成功したことになります。