CentOS7 + Nginx + SSL

http を https にする SSL 化の対応についての作業メモ。

環境

  • SSL ストア
    • FujiSSL (1,100円/年) 安いのでこれを使う。
  • Nginx v1.16.x
  • Centos7

やること

今回は sample.com (www.sample.com) というドメインを SSL 化する。

サーバー側の作業 その1

  • root もしくは sudo で作業。
  • certifications というディレクトリ内で作業する。
    • わかりやすい名前だったらなんでもいいし場所もどこでもいい。
  • sample.xxx というファイル名で作業する。
    • 実際作業する時はドメイン名や年月などを含む分かりやすい名前推奨。
$ cd /etc/nginx
$ mkdir certifications
$ cd certifications

# 鍵作成
$ openssl genrsa -out sample.key 2048
# CSR ファイル作成
$ openssl req -new -key sample.key -out sample.csr

# 下記質問が出る
#
# Country Name (2 letter code) [XX]:
# State or Province Name (full name) []:
# Locality Name (eg, city) [Default City]:
# Organization Name (eg, company) [Default Company Ltd]:
# Organizational Unit Name (eg, section) []:
# Common Name (eg, your name or your server's hostname) []:
# Email Address []:
#
# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:
# An optional company name []:

# 記入例
#
# 記入してエンターキー。英語で記入する。
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shibuya-ku
Organization Name (eg, company) [Default Company Ltd]:Sample Inc.
Organizational Unit Name (eg, section) []:Technical Division
# SSL 化したいドメイン名。絶対間違えないように
# www はサブドメイン無しの sample.com の分だけ購入して設定すれば www も SSL 化できる。
# その他サブドメインは、例えば api.sample.com などは追加購入して作業する。
Common Name (eg, your name or your server’s hostname) []:sample.com
Email Address []:system@sample.com

# 何も入力せずにエンターキーでスキップしていく
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSR ファイルコピー

$ cat sample.csr
# 下記内容コピー
-----BEGIN CERTIFICATE REQUEST-----
MIIC4DCCAcgCAQAwgZoxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzETMBEG
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
I63QtRvF7l2AysUoiQbHSE4TyiHVWtIFxcrajWh8twzCxXfx3rAmZH5J+PX85MbG
xCMK5Gz/Nu8SowAh2pon9OESu96r6RJtGwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
ElRlY2huaWNhbCBEaXZpc2lvbjETMBEGA1UEAwwKc2FtcGxlLmNvbTEeMBwGCSqG
RtLFV45vy+JKavYN4pliAjypluhepuf/6w0qiZehy6lk0m8os/4u+fqkCrHYhbsC
JjgX0ZFRuWIN1kYvkizgD+aZvh86kNNVg2YpBCWpdKk4Ab3DS4VpjbchSZUiT8Fe
SIb3DQEJARYPaW5mb0BzYW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAq6Kvnr9BVzanb+8ANAyuA9w/8Q5KxupEZjF9s4xhcTYjDpf6qVcm
ggEBAI7SibrChDIGg7ghB9mRe+8H1+jv6DKExUyMkh7c0AF6yj4R+76L8BiFwkxQ
TJlUsEAm+ZV5n1r4RJ3F5S5egyPzHxNGDso7DBZH13TrG4Ijh6JnuXDHnJ+PNc6q
a0W4SCBK4sKfe1pJ9XWAFdvZ7q2Kketn0U3ejp5ZuzZysk1qWUJ26ZOLAJm6sofu
kpkEC4d8H5DXWFqdGnxJespjQ77qflnC3qVPg6Dhs6FrQUR/I8zowJ5AA1uUV8KT
0JY0wHhnvG/ZKI5na+0IRDHttwI=
-----END CERTIFICATE REQUEST-----

SSL ストア側作業

  • 「証明書」→「証明書購入」→ SSLを購入する
  • 「証明書」→「証明書管理」→ 購入したSSL「詳細」クリック → アクティベートする
  • コモンネーム: sample.com
  • 認証方式: 「ファイル認証」を選択
    • なんでもいいけど今回はファイル認証で作業する。
  • サーバーの種類: 不明な場合は「その他」
    • この項目は削除された?
  • 登録者情報の入力
    • 先ほどコピーした CSR ファイルの中身をここでペーストする。
    • フォームを入力していく
      • CSR ファイルを作成した時と同じような内容であればいいと思う。
  • しばらくすると登録者情報と技術担当者のメールアドレスにメールが届く
    • そのメールに fileauth.txt が添付されている。
    • sample.com/.well-known/pki-validation/fileauth.txt にアクセスできるようにする。
      • 「.well-known/pki-validation」というディレクトリは自分で作成して fileauth.txt をアップロードする。
  • fileauth.txt が問題なければ数時間ほどでまたメールが届く
    • ca-bundle.ca (中間CA) と sample.com.crt (ドメインの証明証) が圧縮ファイルになって添付されている。

サーバー側の作業 その2

  • ca-bundle.ca と sample.crt を /etc/nginx/certifications にアップロードする。
    • 分かりやすいように名前を変えたほうがいい。
    • Fujissl を複数購入した場合、 ca-bundle.ca の内容はどれも同じになっているので使いまわせる。はず。 (年単位で変更??)

pem ファイルの作成 (証明証を合わせたファイル)

$ cd /etc/nginx/certifications
$ sh -c "cat sample.csr sample.com.crt > sample.pem"

中間 CA の内容コピー

$ cat ca-bundle.ca

-----BEGIN CERTIFICATE-----
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
I63QtRvF7l2AysUoiQbHSE4TyiHVWtIFxcrajWh8twzCxXfx3rAmZH5J+PX85MbG
xCMK5Gz/Nu8SowAh2pon9OESu96r6RJtGwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
I63QtRvF7l2AysUoiQbHSE4TyiHVWtIFxcrajWh8twzCxXfx3rAmZH5J+PX85MbG
xCMK5Gz/Nu8SowAh2pon9OESu96r6RJtGwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
ElRlY2huaWNhbCBEaXZpc2lvbjETMBEGA1UEAwwKc2FtcGxlLmNvbTEeMBwGCSqG
RtLFV45vy+JKavYN4pliAjypluhepuf/6w0qiZehy6lk0m8os/4u+fqkCrHYhbsC
JjgX0ZFRuWIN1kYvkizgD+aZvh86kNNVg2YpBCWpdKk4Ab3DS4VpjbchSZUiT8Fe
SIb3DQEJARYPaW5mb0BzYW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
32S9pEuZhtxtMvPjnsHIWPNdz8pHv21x7bYwDnocwN2uk3QrrljxTQ9evg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
I63QtRvF7l2AysUoiQbHSE4TyiHVWtIFxcrajWh8twzCxXfx3rAmZH5J+PX85MbG
A1UEBwwKU2hpYnV5YS1rdTEUMBIGA1UECgwLU2FtcGxlIEluYy4xGzAZBgNVBAsM
f7t6vGzc24tHDm8Q5dEjTAc+u2kexIJc3sirv5y7GfSWEURU6T+yJ3/aB1nAJi2d
r0SnbzKg+UCg8rxFyJk7ChKl1fe/xwmmxNDS2ZULMwaWInNUWbcpjhA2U6UzahtA
I63QtRvF7l2AysUoiQbHSE4TyiHVWtIFxcrajWh8twzCxXfx3rAmZH5J+PX85MbG
xCMK5Gz/Nu8SowAh2pon9OESu96r6RJtGwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
ElRlY2huaWNhbCBEaXZpc2lvbjETMBEGA1UEAwwKc2FtcGxlLmNvbTEeMBwGCSqG
RtLFV45vy+JKavYN4pliAjypluhepuf/6w0qiZehy6lk0m8os/4u+fqkCrHYhbsC
JjgX0ZFRuWIN1kYvkizgD+aZvh86kNNVg2YpBCWpdKk4Ab3DS4VpjbchSZUiT8Fe
SIb3DQEJARYPaW5mb0BzYW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
xCMK5Gz/Nu8SowAh2pon9OESu96r6RJtGwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
ElRlY2huaWNhbCBEaXZpc2lvbjETMBEGA1UEAwwKc2FtcGxlLmNvbTEeMBwGCSqG
RtLFV45vy+JKavYN4pliAjypluhepuf/6w0qiZehy6lk0m8os/4u+fqkCrHYhbsC
JjgX0ZFRuWIN1kYvkizgD+aZvh86kNNVg2YpBCWpdKk4Ab3DS4VpjbchSZUiT8Fe
SIb3DQEJARYPaW5mb0BzYW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
8UFJH0Cli6sY5l8jhjkOOs1yeu1C/RcY0+NBHKZkFEeEb6ez0sg=
-----END CERTIFICATE-----

sample.pem

  • 中間 CA の内容を最後尾に貼り付ける
$ vi sample.pem

# 最後尾に中間 CA の内容を貼り付ける

nginx の conf ファイル作成

  • sample.conf にする。
    • 分かりやすい名前ならなんでもいい。
  • www.sample.com が sample.com にリダイレクトされる設定にしてみた。
$ cd /etc/nginx/conf.d
$ vi sample.conf

server {
    listen       80;
    server_name  www.sample.com;
    return       301 https://sample.com$request_uri;
}

server {
    listen       80;
    server_name  sample.com;
    return       301 https://sample.com$request_uri;
}

server {
    listen       443 ssl;
    server_name  www.sample.com;

    ssl_certificate /etc/nginx/certifications/sample.pem;
    ssl_certificate_key /etc/nginx/certifications/sample.key;
    return       301 https://sample.com$request_uri;
}

server {
    listen       443 ssl;
    server_name  sample.com;

    ssl_certificate /etc/nginx/certifications/sample.pem;
    ssl_certificate_key /etc/nginx/certifications/sample.key;

    # 以下色々環境に合わせて設定
	root /var/www/html/sample;
}

nginx 再起動

# 再起動する前にエラーがないかチェックする。
$ nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 再起動
$ systemctl restart nginx.service

ファイル構成

/etc/nginx/
  ├ /conf.d
  │    └ sample.conf
  │
  └ /certifications
       ├ ca-bundle.ca ← 中間 CA。 SSL ストアから発行してもらうもの。メールでもらう。
       ├ sample.com.crt ← 証明証。 SSL ストアから発行してもらうもの。メールでもらう。
       ├ sample.csr ← こちらで発行する証明証。
       ├ sample.key ← 鍵。使う。
       └ sample.pem ← 各証明証を合わせたファイル。使う。

ファイアウォール firewalld

  • もし firewalld などを使っていて、 443番を許可してなければ許可する。

関連投稿