読者です 読者をやめる 読者になる 読者になる

naichi's lab

3日後の自分(他人)への書き置き

【CentOS7】KingSSLの証明書を取得してNginxに設定するまでの手順

nginx centos

f:id:naichilab:20160323005151j:plain:w160

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-----

上記BEGINENDの行を全てコピーしてKing SSLに証明書を申し込む。 管理者のメールアドレスはadmin@hogehoge.comを使った。

上記メールアドレスはムームーメールで受信できるように設定済み。

秘密鍵は併用できないので注意。 例えば、foobar.hogehoge.comhogehoge.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;
  ...
}

これで行けた。