nginx + rapid-ssl導入 - わかりやすいよ



nginx + rapid-sslの導入方法を書きます。SSLって何かとめんどくさいイメージありますが、ファイルがどれがどれかわからなくなるから問題なのです。仕組みがわかっていてもファイルがどれがどれかわからなくなります。この時点でめんどくさいですね。でも簡単になるように説明します。
なんでめんどくさい書き方したブログしかないんだよ(・∀・) という不満があったので。

1.Rapid-SSLで暗号鍵を作成


http://www.rapid-ssl.jp/
SSLを取得します。年間で2,600円ですね。

https://www.rapid-ssl.jp/tools/makePkeyCsr2048.php
ダイレクトアクセスできない場合はトップページ> 新規お申し込み > お申込みフォーム > CSR作成ツールより
で2048ビットの秘密鍵の作成を行います。このツールを使ったほうが楽で確実です。

- 秘密鍵のパスワード
- コモンネーム(Common Name) [ 例) ssl.yourdomain.com ]
- 正式英語組織名 [ 例) Hentai, Inc. ]
- 部門名 [ 例) Design ]
- 市区町村名 [ 例) Kanazawa-shi ]
- 都道府県名 [ 例) Ishikawa ]

コモンネームはSSL接続の際のURL(FQDN)になります。ここ注意ね。

秘密鍵 (cert.key ※1)

-----BEGIN RSA PRIVATE KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END RSA PRIVATE KEY-----

CSR (cert.csr)

-----BEGIN CERTIFICATE REQUEST-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----END CERTIFICATE REQUEST-----

の2つが表示されます。
cert.key, cert.csrとしてファイルに保存してください。
/etc/nginx/ssl に私は保存しました。


2.Rapid-SSLで登録支払い・メールの確認


https://www.rapid-ssl.jp/ssl/orderForm.php
のオーダーフォームより必要事項を入力。
CSRの貼り付けの項目では上記のcert.csrの内容を貼り付け。


ショッピングの感覚でクレジット決済まで進みます。
承認メールアドレスという項目は postmaster@yourhost.com などでメールを受け取る必要があります。こちらは怠らずおこなってください。


IDがメールで届き、メールが本当に届いているかの確認を行います。
https://www.rapid-ssl.jp/rapidssl-support/ssl-support.htm
でステータスの確認を行います。


メールに書かれているURLをクリックし
RapidSSLのサイトより認証作業を行います。



のような感じになります。


ステータス = 証明書発行完了
になるまでがんばってください。


3.メールの確認、暗号キーのメールの受取り

【通知】 SSL サーバ証明書発行完了のお知らせ

というメールが届くはずです。私はこのようなタイトルでした。

内容は

SSLサーバ証明書:

-----BEGIN CERTIFICATE-----
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-----END CERTIFICATE-----

中間証明書:

-----BEGIN CERTIFICATE-----
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
-----END CERTIFICATE-----

の2つです。確認できればOKです。


4.サーバ証明書+中間証明書を合体 (・∀・)

nginxではメールで届いた2つの証明書:SSLサーバ証明書、中間証明書をひとつにまとめたファイルにします。

合体証明書 ( cert.pem ※2 )

-----BEGIN CERTIFICATE-----
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
-----END CERTIFICATE-----

としてcert.pemを/etc/nginx/sslに保存。
ここすごく重要なので何度も読みなおすように。


5.ファイルの確認

cert.key ※1とcert.pem ※2がしっかりと手元にあるか確認してください。

cert.key ※1= Rapid-ssl登録時にWEBサイトで作成したものです(秘密鍵)。
cert.pem ※2= メールで送られてきた証明書を2つ合体させたものです(合体証明書)。

この2つがあればnginxのSSLサーバは動きます。

本記事では下記に保存したとして進めてあります。

/etc/nginx/ssl/cert.key
/etc/nginx/ssl/cert.pem

6.サーバ設定

nginxのconfファイルを書き換えます。

server {

    listen 443;
    server_name yourdomain.com;
    ssl on;

    # 秘密鍵 (cert.key ※1)
    ssl_certificate_key  /etc/nginx/ssl/cert.key;

    # 合体証明書 (cert.pem ※2)
    ssl_certificate      /etc/nginx/ssl/cert.pem;

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    access_log /var/log/nginx/ssl_yourdomain.com.log;
    error_log /var/log/nginx/ssl_yourdomain.com.error.log;
    root /var/www/yourdomain.com;
    index index.php;

}

nginx -tコマンドなどを入力すると

# nginx -t
Enter PEM pass phrase:
2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf was tested successfully

パスワード入力が求められます。Rapid-ssl登録時のものを入力しましょう。
エラーがなければあとは普通に再起動です。


その他:

symfony1.4をnginxでSSL化するときのnginx.confファイル例です
fastcgi_param HTTPS on は見落としがちですので注意してください。

server {

    listen 443;
    server_name yourdomain.com;
    ssl on;
    # 秘密鍵 (cert.key ※1)
    ssl_certificate_key  /etc/nginx/ssl/cert.key;
    # 合体証明書 (cert.pem ※2)
    ssl_certificate      /etc/nginx/ssl/cert.pem;

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    access_log /var/log/nginx/ssl_yourdomain.com.log;
    error_log /var/log/nginx/ssl_yourdomain.com.error.log;
    root /var/www/yourdomain.com;
    index index.php;

    location / {
        if (-f $request_filename) {
            expires max;
            break;
        }
        if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
            rewrite ^(.*) /index.php last;
        }
    }
    location /sf/ {
        root /usr/share/php/data/symfony/web;
    }
    location ~ \.php($|/) {
        set $script $uri;
        set $path_info "";
        if ($uri ~ "^(.+\.php)(/.+)") {
          set $script $1;
          set $path_info $2;
        }
        fastcgi_pass 127.0.0.1:9000;
        include /etc/nginx/fastcgi_params;
        fastcgi_param HTTPS on; # PHPで_SERVER[HTTPS]のため
        fastcgi_param SCRIPT_FILENAME /var/www/yourdmain.com/web$script;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param SCRIPT_NAME $script;
    }

}

nginx起動時に求められるパスワードを自動化するには?:

# cp cert.key cert.key.org
# openssl rsa -in cert.key.org -out cert.key

http://webmasters.stackexchange.com/questions/1247/can-i-skip-the-pem-pass-phrase-question-when-i-restart-the-webserver

参考になる:
http://dogmap.jp/2011/05/10/nginx-ssl/