Railsのリバースプロキシとしてnginxを利用している。 そこにSSL証明書をインストールする手順をメモ。
SSL証明書はKing SSLっていうところで買うことにした。安かったし。
購入したコモンネームはfoobar.hogehoge.com
ってことにしてまとめておく。
環境
- CentOS Linux release 7.1.1503 (Core)
- nginx version: nginx/1.8.0
秘密鍵の生成
ここから先のコマンドは全部nginxの入ったサーバーでの操作
# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 # cd /etc/nginx/ # openssl genrsa -des3 -out foobar.hogehoge.com.2016.key 2048 Generating RSA private key, 2048 bit long modulus ........................................................+++ .............................................+++ e is 65537 (0x10001) Enter pass phrase for foobar.hogehoge.com.2016.key: <<パスワードを決めて入れる>> Verifying - Enter pass phrase for foobar.hogehoge.com.2016.key: <<パスワード再入力>>
/etc/nginx
はnginxの設定ファイルがあるフォルダfoobar.hogehoge.com.2016.key
って名前は適当に決めた
CSRの生成
# openssl req -new -key foobar.hogehoge.com.2016.key -out foobar.hogehoge.com.2016.csr Enter pass phrase for foobar.hogehoge.com.2016.key: <<秘密鍵のパスワード入力>> You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Kyoto Locality Name (eg, city) [Default City]:Kyoto-shi Organization Name (eg, company) [Default Company Ltd]:hogehoge Organizational Unit Name (eg, section) []:- Common Name (eg, your name or your server's hostname) []:foobar.hogehoge.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
foobar.hogehoge.com
は購入するコモンネーム- 入力内容はここらへんを参考にした。
証明書の購入
作ったCSRを確認。
# cd /etc/nginx/ # cat foobar.hogehoge.com.2016.csr -----BEGIN CERTIFICATE REQUEST----- <<長々と文字が並ぶ>> -----END CERTIFICATE REQUEST-----
上記BEGIN
〜END
の行を全てコピーしてKing SSLに証明書を申し込む。
管理者のメールアドレスはadmin@hogehoge.com
を使った。
上記メールアドレスはムームーメールで受信できるように設定済み。
秘密鍵は併用できないので注意。 例えば、
foobar.hogehoge.com
とhogehoge.com
といったようにサブドメインのCSRを作成する場合にhogehoge.com.2016.key
を両方で使う。といったことはできない。それをするとkingsslでの申し込み時に
CSR contains a Public Key that is invalid. Please check CSR and recreate using a valid Public Key.
と出て頭を抱えることになる。(というか抱えた)
証明書の保存
証明書が発行されたら、/etc/nginx/foobar.hogehoge.com.pem
を作成し、メールに書かれた◆証明書
と◆中間証明書
を並べて書き込む。
2017メモ。 foobar.hogehoge.com.2017.pem に変えた。
-----BEGIN CERTIFICATE----- <<◆証明書の内容>> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <<◆中間証明書の内容>> -----END CERTIFICATE-----
こんな感じ。
パスワード無しの秘密鍵を生成する
鍵付きのままだとnginx起動時にEnter PEM pass phrase:
というエラーが出て起動できない。
たぶん鍵付きのままで対応する方法はあるんだろうけど鍵を外してしまった。まずいのかな。
# openssl rsa -in hogehoge.com.2016.key -out hogehoge.com.2016.nopass.key Enter pass phrase for hogehoge.com.2016.key: <<秘密鍵のパスワード入力>> writing RSA key
できた。
nginx の設定ファイル
作った秘密鍵と証明書を設定ファイルに書き込んで再起動する。
/etc/nginx/conf.d/vhosts.conf
server { listen 443; server_name foobar.hogehoge.com; ssl on; ssl_certificate /etc/nginx/foobar.hogehoge.com.pem; ssl_certificate_key /etc/nginx/hogehoge.com.2016.nopass.key; ... }
これで行けた。