本手順は 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