概要
ここ数年でウェブの安全性についての環境が変わってきており、主要なブラウザや検索エンジンではSSLで無いサイトは警告が出たり順位が落ちるようになってきた。
このブログでは元々そういった認識の前から続けていたので、SSL対応なんぞされておらず面倒でここまで引き伸ばしてきた。
しかし最近ではSSLに対応していないせいか、検索順位がめっきり下がってきたので流石にまずいと思い重い腰を上げてHTTPS化することにした。
今後のために備忘録を書く。
個人ブログだからSSLの認証に高い金払えるわけでもないから、当然他と同様Let’s Encryptで対応する。
WordPress+Let’s Encryptなぞくさるほど例があるので比較的簡単に導入できた。
手順
まずはLet’s Encryptをかんたんに導入するためのクライアントツールであるcertbotを導入する。
EPELリポジトリが登録されていたらyumで入れられるようだ。
sudo yum install certbot python-certbot-apache
インストールが終わったら証明書を取得する。
sudo certbot certonly --webroot -w /path/to/wordpress/ -d blog.example.com sudo ls /etc/letsencrypt/live/blog.example.com
-wの後にwordpressのパス、-dのあとにドメインを入れれば良い
いくつか質問項目が出てくるのでよしなに答えると完了する。
正常に取得できると/etc/letsencrypt/live/以下にドメイン名のディレクトリが生成され、その下に次のようなファイルができる。
cert.pem chain.pem fullchain.pem privkey.pem README
これでSS化家の準備が整ったのでHTTPサーバの設定を行う。
本ブログではApacheを使用しているのでその設定を変更する。
blog関連の設定はconf.dの中に一つのファイルとしてまとめているためそのファイルを編集する。
sudo vi /etc/httpd/conf.d/blog.conf #ブログのApache設定ファイル
次の項目を追加してリダイレクト設定
# HTTPでアクセスされたものをHTTPSにリダイレクトする <VirtualHost *:80> ServerName blog.ligun.net ServerAlias blog.ligun.net RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent] </VirtualHost> # もともとHTTP(80)で設定してたものを443に変更する <VirtualHost *:443> # Certbotで生成されたSSL用のファイルを設定する SSLEngine on SSLProtocol all -SSLv2 SSLCertificateFile /etc/letsencrypt/live/blog.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.com/privkey.pem SSLCACertificateFile /etc/letsencrypt/live/blog.example.com/chain.pem ... #以下は元と同じ設定
443番のポートを開放する。
sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd reload
準備ができたのでサーバ再起動する。
sudo systemctl restart httpd.service
ここまで問題なければWordPressにアクセスすればHTTPSにリダイレクトされて表示されるはず
表示に問題なければWordPressの管理画面にログインし、設定→一般をクリックする。
WordPressアドレス、サイトアドレスの入力欄のURLをhttps似変更して保存する。
これで各記事へのリンクやリソースへのアクセスがhttpsになる。
更新手順自動化
Let’s Encryptは有効期限が90日なので定期的に更新する必要がある。
certbotに更新コマンドがあるのでcronで定期的に叩いてあげるようにする。
cron.dにそれ用のファイルを作成する。
sudo su vi /etc/cron.d/certbot
記述は次の通り
毎週土曜午前4:00にcertbot renewして成功したらhttpd再起動
–post-hookはcertbotのオプションでコマンド実行後に処理を実行することができる。
0 4 * * 6 root /usr/bin/certbot renew --post-hook "/bin/systemctl restart httpd.service"
一応crond再起動
exit # rootユーザログアウト sudo systemctl restart crond.service
cronが動いているか試したいときは適当に今の時間に近いように設定して時間が過ぎたら/var/log/cronで動いているか見てあげると良い。
以上で設定完了
実際は設定途中でmixed content(混在コンテンツ)やtoo_many_redirectとかのエラーで微妙にハマったところがあったけど、こっちの単純な設定ミスだった。
これでやっと現代的なブログになってきた。
コメント