今や、多くのサイトがWebサーバソフトにapacheではなく、nginxを利用しているのではないでしょうか?
そんなnginxですが、ページをSSL対応にするためのまとまった情報が少ない気がしました。ここでは、nginxを使っている方で、SSL化したときの手順についてご紹介したいと思います。
CSRの発行
最初にSSLの発行会社でSSLを購入するためにCSRを発行します。CSRとは、サーバ証明書を発行するために必要な署名要求のことを指します。CSRと公開鍵、秘密鍵のキーペアを生成します。
最初にお使いのサーバにSSHでログインします。そして、証明書を保存するディレクトリへ移動しましょう。SSLのディレクトリを作成しても構いません。
mkdir /etc/nginx/sslcd /etc/nginx/sslopenssl req -new -newkey rsa:2048 -nodes -keyout (キーの名前).key -out (CSRの名前).csr
以上を入力すると、CSRを作成するための質問が表示されます。以下のスクリーンショットのように入力してください。
次に、発行したCSRをlessコマンドで表示しましょう。
less blognetatest.csr
ここで表示されたCSRをコピーします。ここで重要なことは、「—–BEGIN CERTIFICATE REQUEST—–」から、「—–END CERTIFICATE REQUEST—–」まですべてコピーすることです。コピーしたCSRはメモ帳などに貼り付けておきましょう。
SSL発行会社で購入する
現在、様々な証明書が販売されていますが、ブログなどの個人で運営しているものは、安い証明書で十分です。筆者はSSLボックスで販売されているSecureCoreをオススメします。年額990円でCOMODOの中間認証を使った証明書が手に入ります。スマートフォンやガラゲーにも対応していますので、十分でしょう。本サイトでも使用しています。
証明書を購入する際に、先ほどコピーしたCSRを聞かれますので、貼り付けます。なお、発行する際に使用したドメインとCSRをサーバ上で発行する際に指定したドメインは、サブドメインも含めて完全一致する必要がありますから注意が必要です。
証明書と中間証明を合体する
証明書の購入が完了し、無事発行されたら、発行された証明書と中間証明を合体します。この合体の作業がnginx独特な表現なのです。メモ帳などで、証明書、中間証明の順で並べてください。
—–BEGIN CERTIFICATE—–
(発行された証明書)
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
(発行された中間証明)
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
(発行された中間証明)
—–END CERTIFICATE—–
これを「(証明書名).cert」などの名前でサーバにUPします。VIコマンドなどを使用して、貼り付けても良いでしょう。
vi blognetatest.cert
以上で、証明書の準備ができました。あとは、それをnginxのconfファイルに適用するだけです。
nginxのconfファイルの設定方法
nginxのconfファイルを開きましょう。
はじめに、
listen 443 ssl;
で443ポートで通信が来た時に捕捉できるようにリッスンしましょう。
次に対応するアルゴリズムを指定します。筆者は以下の通り設定しています。一応、現時点で最新のアルゴリズムに対応しています。この設定で概ねのブラウザに対応できるはずです。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-G CM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-R SA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA: DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-G CM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK;
最後に、SSLセッションキャッシュを有効にします。SSLのセッションキャッシュとは、SSLのKeepAliveのようなもので、SSLのセッションを一定時間有効にする技術です。SSLはサーバに負担をかけますし、ユーザがページ遷移するためにSSL通信をはじめからするようではアクセスに時間がかかりすぎるからです。この方法で、2ページ目以降のロード時間を短縮することができます。
ssl_session_cache shared:SSL:5m;ssl_session_timeout 10m;
最後に、証明書とキーペアを指定すれば完了です。
ssl_certificate/etc/nginx/ssl/(証明書のファイル名).cert;ssl_certificate_key /etc/nginx/ssl/(キーペアのファイル名).key;
以上を設定して、「service nginx restart」を行い、エラーが発生しなければ完了です。