もうちょっとするとGoogleChromeで非HTTPSサイトに警告がでるようになるっていうのはニュースにもなっててご存知の方も多いかと思います。
※かくいう@itもまだSSL化してなかったのね・・・・。
さすがに「安全じゃないよ」って出されるのは書いてる側としても本意ではないのでSSL化させることにしました。
条件は下記
・極力お金はかけない(というかかけられない)
・1つのサーバで複数のドメインを使っているのでまとめて適用させたい(いずれもwordpress)
・何よりめんどくさくない方法で。
で、みつかったのが無料のサーバ証明書を発行してくれる「Let’s encrypt」。
※StartSSLっていうのも前まではあったみたいだけど提供終了したみたい
当方の環境は以下
・OS:CentOS7.5
・http:Apache2.4
・SSL化したいドメイン:3pei.info, 〇〇.net
で、以下が作業手順です。難しそうに見えるかもしれませんが、案外簡単です
①証明書作成用のアプリをインストール
yum install certbot python-certbot-apache
②登録したいドメインを付けて実行
※下記は1つの証明書に複数のドメインを入れる場合です。特に理由がなければ別々にしたほうがきれいだと思います
certbot certonly --webroot -w /var/www/html/ -d 3pei.info -d 〇〇.net
③出来上がった証明書をapacheに登録
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/3pei.info/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/3pei.info/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/3pei.info/chain.pem
④httpdをReloadしてできあがり
⑤Wordpress側を対応させるためプラグインをインストール(Really Simple SSL)
※マルチサイト設定にしてるけど有効化は個別に
※プラグインに頼らなくともできることがわかったので、その後このプラグインは消しました。ただ作業が面倒なのでやめておいたほうがいいです
(後から後から次々と問題が出てくる)
⑥GoogleAnaryticsの設定をhttpsに変更
⓻3か月で証明書が切れるそうなので毎月初めに自動更新するようcronに登録
※/etc/cron.monthlyに以下内容のファイルを保存
certbot renew –webroot-path /var/www/html/ –post-hook “systemctl reload httpd”
※上記コマンドに –force-renew をつければ強制更新されるのでそれで動作確認
できあがり。Really Simple SSLが全部HTTPSにリダイレクトしてくれるので余計な設定不要。
細かい話をすればサブサイト側で証明書の詳細見たときにメインサイトの名前もでてしまうが、まぁいいや(←改善済)
とりあえず何も詰まることなく完了。こううまくいくときはたいてい後で致命的な問題がみつかるんだよな・・・・。
補足:自動更新内容はこんな感じです
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/登録済みドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert not yet due for renewal ←更新の必要ないよの意
※これを登録してあるドメイン数分繰り返す。
登録してある = /etc/letsencrypt/live にファイルがあると登録済みと認識される
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
The following certs are not due for renewal yet:
/etc/letsencrypt/live/登録済みドメイン名/fullchain.pem expires on 2020-03-30 (skipped)
No renewals were attempted.
No hooks were run.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
これが何もない時。
更新されるとこんな感じ(更新失敗例つき)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/更新対象ドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert is due for renewal, auto-renewing…
Non-interactive renewal: random delay of 282 seconds
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 更新対象ドメイン名
Using the webroot path サーバのWebRoot for all unmatched domains.
Waiting for verification…
Cleaning up challenges
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/更新対象ドメイン名/fullchain.pem
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/更新失敗ドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert is due for renewal, auto-renewing…
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 更新失敗ドメイン名
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification…
Challenge failed for domain 更新失敗ドメイン名
http-01 challenge for 更新失敗ドメイン名
Cleaning up challenges
Attempting to renew cert (更新失敗ドメイン名) from /etc/letsencrypt/renewal/更新失敗ドメイン名.conf produced an unexpected error: Some challenges have failed.. Skipping.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
The following certs could not be renewed:
/etc/letsencrypt/live/更新失敗ドメイン名/fullchain.pem (failure)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
The following certs are not due for renewal yet:
/etc/letsencrypt/live/更新不要ドメイン名/fullchain.pem expires on 2020-03-30 (skipped)
The following certs were successfully renewed:
/etc/letsencrypt/live/更新対象ドメイン名/fullchain.pem (success)
The following certs could not be renewed:
/etc/letsencrypt/live/更新失敗ドメイン名/fullchain.pem (failure)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Running post-hook command: systemctl reload httpd ←更新されたドメインがあるときは自動的にreloadが走る
なおreloadはWEB表示には影響しないので安心(restartは影響する)
1 renew failure(s), 0 parse failure(s)
IMPORTANT NOTES:
– The following errors were reported by the server:
Domain: 更新失敗ドメイン名
Type: unauthorized
Detail: Invalid response from
http://更新失敗ドメイン名/.well-known/acme-challenge~
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
ちなみにここで出てくる「更新失敗ドメイン名」はFreenumで取得してたのをうっかり忘れてて使えなくなってしまったもの。
つまり更新時に名前解決ができない状態だったために、自動更新が機能しなかったんだと考えられます。
以上、何かの参考になれば幸いです。
WordPress使ってるなら持っておきたい書籍たち