さくらVPSにnginx + wordpressの環境を構築してちょこちょこ遊んでおります。近いうちにHTTPSで接続できるようにもしたいなぁと思ってたのですが、手つかずのまま大分時間が経過してしまいました。
今回はSSL証明書を導入してHTTPSで接続できるように設定していきます。
環境(前提)
- CentOS 7 (さくらVPS)
- WordPressの環境を設定済み(httpでアクセス可能)
全体の流れ
作業的には下記3ステップとなります。
1.サーバ上で秘密鍵とCSRの作成
2.SSL証明書の購入
3.サーバに証明書を設置
事前準備
まずは事前準備です。下記ソフトをインストールします。
1 2 |
$ sudo yum install openssl $ sudo yum install mod_ssl |
秘密鍵とCSRの作成
ココでは下記作業を行います。
- 秘密鍵作成のための擬似乱数ファイル(rand.dat)を生成
- 疑似乱数ファイルから秘密鍵を生成
- 秘密鍵からCSRを作成
1 2 3 |
# 疑似乱数ファイルを生成 $ cd /etc/pki/nginx $ sudo openssl md5 /usr/bin/* > rand.dat |
1 2 3 4 5 6 7 8 9 |
# 秘密鍵を生成 $ sudo openssl genrsa -rand rand.dat -des3 2048 > newkey.pem 61643 semi-random bytes loaded Generating RSA private key, 2048 bit long modulus .......................................+++ ........................................................+++ e is 65537 (0x10001) Enter pass phrase: <任意のパスワードを入力> Verifying - Enter pass phrase: <再度同じパスワードを入力> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# CSRを生成 (入力内容は仮だよ) $ sudo openssl req -new -key newkey.pem -out newcsr.pem Enter pass phrase for newkey.pem: <秘密鍵生成時のパスワードを入力> 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) []:Tokyo Locality Name (eg, city) [Default City]:Arakawa Organization Name (eg, company) [Default Company Ltd]:Sakura Organizational Unit Name (eg, section) []:VPS Common Name (eg, your name or your server's hostname) []:centos7.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: $ $ cat newcsr.pem -----BEGIN CERTIFICATE REQUEST----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAA 秘密だよ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END CERTIFICATE REQUEST----- |
CSR生成時の設定項目は下記です。下記以外の項目については入力は任意です(Enter連打でOK)。
CSR生成時の入力項目 | 記載内容 | 設定例 |
---|---|---|
Country Name (2 letter code) [XX]: | 国別番号 | JP |
State or Province Name (full name) : | 都道府県名 | Tokyo |
Locality Name (eg, city) [Default City]: | 市区町村名 | Arakawa |
Organization Name (eg, company) [Default Company Ltd]: | 組織名 | Sakura |
Organizational Unit Name (eg, section) : | 部門名 | VPS |
Common Name (eg, your name or your server’s hostname) []: | コモンネーム(FQDN) | centos7.com |
入力内容はご自身の環境に合わせて変更ください。作成した秘密鍵はなくさないように。
ここで生成したnewcsr.pemの中身がSSL証明書の購入時に必要になりますのでtextファイル等にコピペしましょう。
SSL証明書の購入
こちらからSSL証明書を購入します。今回はRapidSSLを選択します。
プランと決済方法を選択します。私は3年プランを選択しました。
続いて先ほど生成したCSRの内容を入力します。
後はさくらインターネットさんからメールが来るのを待ちます。
サーバー証明書の設置
サーバー認証
SSL証明書の購入手続きが完了すると下記のようなメールが届きます(抜粋)。会員ページより認証ファイルを取得して指定のパスに配置しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
お申込みいただきましたSSLサーバ証明書の申請が完了いたしましたので、お知 らせいたします。 ================================================================ 《 SSLサーバ証明書の情報 》 サーバ証明書種別:SSL ラピッドSSL(3年) サービスコード :xxxxxxxxxxxx コモンネーム :xxxxxxxxxxxxxxxxx ================================================================ 引き続き、認証局より申請いただいたドメインの使用権の確認がございますので、 以下の手順をご確認の上、認証ファイルのアップロードをお願いいたします。 ※認証ファイルは以下のいずれかのURLに配置 認証ファイル名は、fileauth.txtです 例) http://<申請時に指定したFQDN(コモンネーム)>/.well-known/pki-validation/fileauth.txt |
まず、認証ファイルを取りに行きます。
続いて認証ファイルを設置します。
1 2 3 4 |
# 環境により変わる $ sudo mkdir -p /var/www/wordpress/.well-known/pki-validation/ $ sudo mv fileauth.txt /var/www/wordpress/.well-known/pki-validation/ |
設置後にブラウザからアクセスして中身が見えたらOKです。この状態でしばらく待つと認証が完了し再度メールが届きます。認証が終ったらサーバー上からファイルは削除しましょう。
証明書の設置
認証が完了すると下記のような、SSLサーバ証明書が発行された旨のメールが届きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
お申込みいただきましたSSLサーバ証明書の発行が完了いたしましたので、以下 の通りお知らせいたします。 ================================================================ 《 SSLサーバ証明書の情報 》 サーバ証明書種別:SSL ラピッドSSL(3年) サービスコード :xxxxxxxxxxxx コモンネーム :xxxxxxxxxxxxxxxxxxx 証明書有効期限 :2020年09月23日 ================================================================ つきましては、以下に手順を記載いたしますので、お客様にてご利用サーバへ の導入作業を行っていただきますよう、お願いいたします。 |
- SSLサーバ証明書
- 中間CA証明書
メールの記載に従って上記2点を取ってきます。会員ページよりSSLサーバ証明書、メールに記載されているリンクから中間CA証明書をそれぞれ取得します。
SSLサーバ証明書
認証が完了していると状態が変わり利用期間が表示されています。
中間CA証明書
取得した証明書をサーバー上で結合し配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo cat server.crt ca.crt > serverca.crt $ vim serverca.crt # 証明書の間に改行を入れる $ cat serverca.crt -----BEGIN CERTIFICATE----- SSLサーバ証明書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 中間CA証明書 -----END CERTIFICATE----- |
これで必要なファイルはそろいました。
nginxの設定
秘密鍵とSSLサーバ証明書をnginxのコンフィグに合わせて配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# 環境により異なる $ sudo mkdir -p /etc/pki/nginx/private/ $ sudo cp serverca.crt /etc/pki/nginx/server.crt $ sudo cp newkey.pem /etc/pki/nginx/private/server.key $ $ cat /etc/nginx/conf.d/wordpress.conf server { listen 80; server_name .<あなたのサーバ>; rewrite ^ https://<あなたのサーバ>$request_uri?; } server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name <あなたのサーバ>; root /var/www/wordpress; ssl_certificate "/etc/pki/nginx/server.crt"; ssl_certificate_key "/etc/pki/nginx/private/server.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED'; index index.php; location ~* /wp-config.php { deny all; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include fastcgi_params; } } |
このままnginxを再起動すると秘密鍵のパスワード入力が出来ずに失敗します。なので秘密鍵からパスフレーズを削除します。
1 2 3 |
$ sudo cd /etc/pki/nginx/private/ $ sudo cp server.key server.key.orig $ sudo openssl rsa -in server.key -out server.key |
nginxの設定が完了したらコンフィグ内容を確認して再起動します。
1 2 3 4 5 |
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful $ $ sudo systemctl restart nginx.service |
接続確認
nginxを再起動後にhttps付きでサイトにアクセスし、緑色の鍵マークが表示されればOKです。
鍵マークが表示されない(ブラウザに怒られる)、アクセスできない等が発生した場合はnginxのコンフィグ、ファイアウォールの設定、Wordpressの設定を見直してみてください。