Nginx で HTTPS(SSL)の設定を行う手順を記しておきます。
今さら感はありますが、そろそろ本格的に触っていかないとまずそうなので、基本のきから勉強をはじめます。
Nginx をHTTPS化する
環境
以下の環境で行ってます。
1 2 3 4 5 |
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) # nginx -v nginx version: nginx/1.12.2 |
SSL証明書の作成
まずは、これがないと始まらない。SSL証明書を用意します。自己証明書、いわゆるオレオレ証明書の作り方は以下のエントリにまとめていますのでどうぞ。
Nginx の設定
SSL用の Config 作成
続いてはおさらいですが、Nginx の設定ファイル保存先などは以下。
/etc/nginx/conf.d
SSL設定用にファイルを作っていまいましょう。ssl.conf とかでよいのではないでしょうか。デフォルトで存在する default.conf をコピーして使います。
1 2 3 4 5 6 7 8 |
server { listen 443 ssl; server_name nginx-ssl.com; ssl on; ssl_certificate /etc/nginx/cert02/nginx-ssl.com.pem; ssl_certificate_key /etc/nginx/cert02/nginx-ssl.com.key; } |
説明です。
- ssl_certificate
SSL証明書ファイルのパスを指定します。 - ssl_certificate_key
秘密鍵ファイルのパスを指定します。
続いて、設定を反映させます。Nginx ではプロセスを再起動する必要はありません。
1 |
# systemctl reload nginx |
または、以下の nginxコマンドでもOKです。
1 |
# nginx -s reload |
Webブラウザで、https://DomainName などとアクセスして確認します。オレオレ証明書なので当然エラーがでますが検証なので、しょうがなしです。
たったこれだけでサービスとして使えませんが、とりあえずHTTPSとして動くことが確認できました。
以下におまけとして、秘密鍵作成時にパスフレーズを設定している場合は、nginx をリスタートするときにエラーがでます。その場合の対処法をまとめましたので、どうぞ。
おまけ
おれおれ証明書を作成したときに(秘密鍵を作成するときに)パスフレーズが設定されていると以下のようなエラーがでます。
1 |
2017/10/31 00:15:41 [emerg] 1343#1343: SSL_CTX_use_PrivateKey_file("/etc/nginx/cert02/nginx-ssl.com.key") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:problems getting password error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib) |
ちなみにエラーログは以下です。ログの見方は特段珍しいフォーマットでもないので割愛します(ホントはよく知らないだけ)
/var/log/nginx/error.log
↑のエラーの解消法は以下の様にパスワードを記載したパスワードファイルを用意して、設定ファイルに定義してやれば良いです。
1 2 3 4 5 |
# ls -l 合計 12 -rw-r--r-- 1 root root 1766 10月 31 00:12 nginx-ssl.com.key -rw-r--r-- 1 root root 1212 10月 31 00:14 nginx-ssl.com.pem -rw-r--r-- 1 root root 9 10月 31 00:43 ssl_pass_file.txt |
まぁ、秘密鍵と同じディレクトリに置くのはどうかと思いますが。。。
設定ファイルの記載は以下です。
1 2 3 4 5 6 7 8 9 |
server { listen 443 ssl; server_name nginx-ssl.com; ssl on; ssl_certificate /etc/nginx/cert03/nginx-ssl.com.pem; ssl_certificate_key /etc/nginx/cert03/nginx-ssl.com.key; ssl_password_file /etc/nginx/cert03/ssl_pass_file.txt; ★ } |
ssl_password_file ディレクティブにパスワードを記載したファイルのパスを指定します。
というのが一つ目の解消法で、もうひとつが以下です。
そもそも、秘密鍵にパスフレーズが設定されていることが原因で、参照できなくなっているので、パスフレーズを外してしまいましょう。
openssl コマンドを使用してパスフレーズを外すことができます。あらかじめ秘密鍵をコピーして、戻せるようにしておきます。
1 2 3 4 |
# cp -p nginx-ssl.com.key nginx-ssl.com.key.org # openssl rsa -in nginx-ssl.com.key -out nginx-ssl.com.key Enter pass phrase for nginx-ssl.com.key: パスフレーズを入力 writing RSA key |
その後、Nginx を再起動してみると問題なく起動して、Webブラウザからも正常にアクセスできるようになります。
おまけその2
Nginx と php-fpm で WordPress など動かしたい場合は、以下で nginx とphp-fpm の連携につい紹介しています。UNIXドメインソケットの設定方法なども記載しているのでぜひどうぞ。
以上です。
↓↓↓ 持っていると便利な一冊。