本手順は FreeBSD 9.x プラットフォームでの Nginx サーバーを対象にした SSL 及び SPDY対応のセットアップ手順です。 Nginx は Version 1.4 から SPDY が正式にサポートされましたが、 SPDY では OpenSSL 1.0.1 より実装されている “Next Protocol Negotiation” を利用するため、 最新のOpenSSLのインストール作業が必要になります。
1. 依存パッケージ
- Nginx 1.4以上
- OpenSSL 1.0.1以上
FreeBSD ではベースシステムに OpenSSL が含まれていますが、古いバージョン0.9.8のままです。 SPDY では OpenSSL 1.0.1 より実装されている Next Protocol Negotiation を利用するため Portsから最新バージョンをインストールする必要があります。
ベースシステムのOpenSSL のバージョンは以下のコマンドで確認できます。
openssl version OpenSSL 0.9.8x 10 May 2012
2. 最新のOpenSSLのインストール
echo "WITH_OPENSSL_PORT=yes" >> /etc/make.conf
cd /usr/ports/security/openssl make install
/usr/local/bin/openssl にインストールされます。
最新のバージョンのOpenSSLがインストールされたことを確認します。
/usr/local/bin/openssl version OpenSSL 1.0.1e 11 Feb 2013
3. Nginx のインストール
既にNginxがインストール済みの場合は再インストールします。make.confに WITH_OPENSSL_PORT を設定したことで自動的に portsのOpenSSLを参照するようにビルドされます。
cd /usr/ports/www/nginx make config
- SSLモジュールを有効にします
- SPDYモジュールを有効にします
[X] SSL Enable http_ssl module [X] SPDY Enable SPDY protocol support (SSL req.)nginx をインストールします。
make install
4. サーバー証明書の作成
トリプルDESを使い、2048bit の秘密鍵を生成します。
/usr/local/bin/openssl genrsa -des3 -out server.key 2048
秘密鍵を保護するためのパスフレーズの入力を求められるので入力します。
作成した秘密鍵ファイルからCSR(証明書署名要求ファイル)を生成します。
/usr/local/bin/openssl req -new -key server.key -out server.csr
秘密鍵のパスフレーズの入力が求められるので入力します。 以下の項目の入力が求められますので入力します。
Country Name (2 letter code) | 国名 |
---|---|
State or Province Name (full name) | 都道府県名 |
Locality Name (eg, city) | 市 |
Organizational Name | 組織名 |
Organizational Unit Name | 部門名 |
Common Name | SSL接続の際のURL |
Email Address | 電子メールアドレス。ブランクでよい。 |
A challenge password | ブランクでよい。 |
An optional company name | ブランクでよい。 |
証明書署名要求ファイルからサーバ証明書を作成します。
/usr/local/bin/openssl x509 -req -in server.csr -signkey server.key -out server.crt
秘密鍵ファイルのパーミッションを設定します。
chmod 600 server.key
nginx の設定ディレクトリに移動します。
mv server.* /usr/local/etc/nginx/
5. nginx の設定
nginx の設定を編集し、SPDY を有効にして、サーバー証明書ファイルを指定します。
vi /usr/local/etc/nginx/nginx.conf
- SSLセッションタイムアウトは5分
- TLSv1 TLSv1.1 TLSv1.2を有効にします。
※ Firefox21 は TLSv1 まで、Chrome 27 は TLSv1.1 まで、Internet Explorer 10 以降は TLSv1.2 まで対応しています。「TLSのブラウザサポート」表を参照。
server { listen 443 default ssl spdy; server_name _; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_timeout 5m; ~ 省略 ~ }
6. 運用手順
nginxの起動、停止でパスフレーズの入力を求められるので入力します。 再起動には3回ほどserver.keyのパスフレーズの入力められます。nginxの起動や終了のたびに数回パスフレーズの入力する必要がありますが、 server.keyの暗号化を解除することで回避できます。ただし、本番環境ではセキュリティ上、解除しない方が良いでしょう。
mv server.key server.key.org /usr/locl/bin/openssl rsa -in server.key.org -out server.key
これで nginx の起動、停止でパスフレーズの入力が求められなくなります。
起動
/usr/local/etc/rc.d/nginx start
停止
/usr/local/etc/rc.d/nginx stop