NginxにSSL(VeriSign)をInstall、設定

nginx_ssl_installVeriSignのSSL「グローバル・サーバID」をnginxにInstall、設定するまでの作業をMemo.

参考にしたのは下記Site.

 


秘密鍵(Key)と証明書署名要求(CSR)を作成

疑似乱数を作成
# touch rand.dat
# openssl md5 rand.dat > rand.dat

秘密鍵の作成
# openssl genrsa -rand rand.dat -des3 2048 > 2012key.pem

秘密鍵はBackupしておく。

証明書署名要求(CSR)を作成
# openssl req -new -key 2012key.pem -out 2012csr.pem

 


サーバIDと中間CA証明書のInstall

VeriSignで手続きを済ませたら「サーバID」という証明書が送られてくる。

これに中間CA証明書を追記する。中間CA証明書はOfficial SiteにLinkがある。

あとはnginxのconfを設定して再起動する。

こんな感じ

server {
    listen       443 ssl;
    server_name  hoge.jp www.hoge.jp;

    root    /home/httpd/hoge/httpdocs;
    index   index.php index.html index.htm;
    charset utf-8;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/2012cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/2012key.pem;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
    }

    location ~* \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include        fastcgi_params;
        client_max_body_size 20M;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }

    # if the file is not found, forwarded to index.php (permalinks)
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
    }

}

 

nginxを再起動
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx restart

起動するときにPassphraseをなしで起動する場合は下記Siteを参考に。

 

< 2013/10/04 Modified >
更新する際になぜか新しい証明書をインストールして再起動してもブラウザ上で更新期限が変わらず焦った。数日後、証明書の更新期限を確認してnginxを再起動したら無事更新された。。。

証明書の更新期限を確認するコマンド
# openssl x509 -noout -dates -in 2012cert.pem

VeriSignが提供している証明書を確認できるサービス

 

< 2014/08/25 Modified >
サーバーの移行に伴いVeriSignからGlobalSignに移行。基本は同じ。公式サイトを参考に。

インストール後、アクセスしてみると下記エラーで困った(Firefox)。

ssl_error_rx_record_too_long

「listen 443;」を「listen 443 ssl;」にする必要があるらしい。

それと「listen 80;」「listen 443;」を同じブロック内に記述できるみたい。けどhttpはhttpsにリダイレクトするようにした。

server {
    listen 80;
    server_name hoge.com www.hoge.com;
    return 301 https://hoge.com$request_uri;
}

server {
    listen       443 ssl;
    server_name hoge.com www.hoge.com;

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/2014_hoge_cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/2014_hoge_nopass_key.pem;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
}

 

 


開発用の証明書を作成

一応開発用にサーバ証明書を作成しておく。認証されているわけではないので、表示したときに警告は出る。

# cd /etc/nginx
# mkdir ssl.d
# cd ssl.d
# openssl genrsa -des3 -out key.pem 1024
# openssl req -new -key key.pem -out csr.pem
# openssl rsa -in key.pem -out key_nopass.pem
# openssl x509 -req -days 365 -in csr.pem -signkey key_nopass.pem -out cert.pem

nginxのconfに追記

server {
    listen       443;
    server_name  hoge.com;

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/key_nopass.pem;

    location / {
    }
}

 

 

< Related Posts >