SSL on Apache2

セキュアなサイトを実現するSSL の実装をApache2 に施します。Apache2 は当初からSSL がサポートされているので、簡単な設定で 実現できます。
更新日 2016-02-18

SSL 概要

SSL は通信を暗号化する技術で、セキュリティの必要な情報の送受信に使われます。Apache2 はSSL を簡単に扱えます。

Apache2 のコンパイル

コンパイル時にSSL の利用を設定していなければなりません。

コンパイル

ソースコードを手に入れてコンパイルします。--enable-ssl を付けてプリコンパイルします。
./configure --enable-ssl --enable-deflate --enable-usertrack \
--prefix=/usr/local/apache2.0.55

make
make install

RapidSSL でサーバ証明書を取得する

RapidSSL は格安で有名ですが、GreoTrust、VeriSign のグループ会社の一つのようです。申し込みから発行まで実質30分以内です。スマホ対応率も100%との事。

CSR の生成

CSR(Certificate Sigining Request) とはサーバ証明書を発行するのに必要な署名要求の事です。openssl で作成します。
cd /etc/pki/tls/certs

// md5 ダイジェスト値を擬似乱数として使用する
openssl md5 * > rand.dat

// 擬似乱数を元に秘密鍵を作る(要パスフレーズ)
openssl genrsa -rand rand.dat -des3 2048 > ast.qt-space.com.key

// 秘密鍵からCSRを作る
openssl req -new -key ast.qt-space.com.key -out ast.qt-space.com.csr

 // Country Name (2 letter code) [XX]:JP
 // State or Province Name (full name) []:Aichi
 // Locality Name (eg, city) [Default City]:Iwakura-City
 // Organization Name (eg, company) [Default Company Ltd]:
 // Organizational Unit Name (eg, section) []:
 // Common Name (eg, your name or your server's hostname) []:ast.qt-space.com
 // Email Address []:ast@qt-space.com
 // 
 // Please enter the following 'extra' attributes
 // to be sent with your certificate request
 // A challenge password []:
 // An optional company name []:

SSLストアでRapidSSLサーバ証明書の購入手続きを行う

SSLストアでRapidSSL(3年 3,200円)を購入します。作成したCSR の中身(テキスト)を認証手続きに従って 貼り付けて送信します。しばらく待つとサーバー所有者確認用のファイルをダウンロードできますので、 それを自分のWebサーバーにアップロードしクロールできるようにします。
SSLストアから無事クロールされてサーバーの所有者確認が済むとさらに審査が行われます。合格すれば サーバ証明書と中間証明書の2つをメールで受け取れます。
cd /etc/pki/tls/certs

// RapidSSL RN SSLサーバ証明書
vi ast.qt-space.com.crt
 // -----BEGIN CERTIFICATE-----
 // 英数字テキスト
 // -----END CERTIFICATE-----

// 中間CA証明書
vi ast.qt-space.com.rapidssl-chain.crt
 // -----BEGIN CERTIFICATE-----
 // 英数字テキスト
 // -----END CERTIFICATE-----
ファイルは4つ出来てます。
ast.qt-space.com.key
ast.qt-space.com.csr
ast.qt-space.com.crt
ast.qt-space.com.rapidssl-chain.crt

パスフレーズを解除する

Apache2 の再起動時に秘密鍵のパスフレーズを聞かれます。サーバーの自動起動の妨げになってしまうため、 秘密鍵からパスフレーズを除去します。
// パスフレーズを除く
openssl rsa -in ast.qt-space.com.key -out ast.qt-space.com.key

設定と起動

Apache2.2 の設定ファイルを修正します。

httpd-vhosts.conf のカスタマイズ

VirtualHost 運用でSSL を使う場合です。既にVirtualHost *:80 で運用してるサイトであれば、VirtualHost ディレクティブを 別に追加します。80ポートでも受け付けておいて、SSL にリダイレクトさせるようにします。
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

// 追加
<VirtualHost *:443>
	DocumentRoot "/home/ast"
	ServerName ast.qt-space.com

	SSLEngine on
	SSLProtocol all -SSLv2
	SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
	SSLCertificateFile "/etc/pki/tls/certs/ast.qt-space.com.crt
	SSLCertificateKeyFile "/etc/pki/tls/certs/ast.qt-space.com.key
	SSLCertificateChainFile "/etc/pki/tls/certs/ast.qt-space.com.rapidssl-chain.crt

</VirtualHost>

<VirtualHost *:80>
	DocumentRoot "/home/ast"
	ServerName ast.qt-space.com

	// 外部からのアクセスはSSLにリダイレクト
    RewriteCond %{REMOTE_ADDR} !^192\.168
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*)$ 			https://%{HTTP_HOST}/$1		 [L,R,QSA]

</VirtualHost>