NginxにSSL(VeriSign)をInstall、設定
VeriSignのSSL「グローバル・サーバID」をnginxにInstall、設定するまでの作業をMemo.
参考にしたのは下記Site.
- Apache + OpenSSL CSR生成手順 (新規)|CSRの生成|日本ベリサイン
- Apache + OpenSSL サーバIDインストール手順 (新規)|サーバIDのインストール|日本ベリサイン
- nginx で ssl 設定をする
秘密鍵(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 >