本家ブログhttps化
世間はいつの間にかhttpsが標準になりつつあるが、自宅サーバーのために金払ってSSL証明書を取得するのも馬鹿らしいと思って、ずーーっとhttpのままだったんだけど、ふと思い立ってhttpsに移行してみた。
SSL証明書自体は、 メールサーバ(受信専用)のIMAPサーバをオレオレ証明書でSSL化してたけど 、証明書の有効期限が切れるたびに過去のメモを参考に証明書を再発行して、さらにクライアント側に証明書を信頼済みとしてインポートして…、ってのが常々面倒くさいと思ってる状態だった。
で、今回色々調べてみたら、Let’s Encrypt(日本語解説サイト)という無償のSSL証明書発行サービスがあることを知って、Webサーバ(Apache)とともにメールサーバ(courier-imapd-ssl)もちゃんとSSL化することができた。そしたら、IMAPSのレスポンスも早くなったようだ。オレオレ証明書の検証は何か無駄な待ち時間があったのかな。
ちなみに、Let’s EncryptによるApacheのhttps化は、他のサイトの解説にある通り、コマンド一発(対話入力式)でホントに簡単だった。2番目のコマンドだけで、証明書の取得やapacheの設定ファイルの更新&再起動まで全てやってくれた。 httpsへのリダイレクト設定までやってくれた。
# apt-get install python3-certbot python3-certbot-apache
# certbot run --apache -w /var/www/html/ -d www.tapoblog.0t0.jp
※この記事を書きながら確認してて気づいたが、-wは–webrootプラグインのオプションなので、–apacheプラグインでは不要だったようだ。
次にcourier-imapd-sslだが、ぶっちゃけ正確な意味は理解していないが、apache向けに取得した証明書と秘密鍵を合体させたファイルを用意してやったら、オレオレじゃないIMAPSサーバになった。
# cat /etc/letsencrypt/live/www.tapoblog.0t0.jp/privkey.pem /etc/letsencrypt/live/www.tapoblog.0t0.jp/fullchain.pem > /etc/courier/imapd.pem
# systemctl restart courier-imap-ssl.service
そして証明書の自動更新は、cronで更新用のコマンドを叩いてやるだけ。証明書の有効期限が残り30日以下の場合のみ実際に証明書の再取得が行われるとのこと。と言うわけで、自動更新がうまくいくかどうかは約2ヶ月後のお楽しみ。
# crontab -e
00 04 * * * certbot renew
なお、自動更新時にApacheやcourier-imapd-sslを再起動させるためのコマンドは、コマンドラインオプション(–post-hook)ではなく、シェルスクリプトとして/etc/letsencrypt/renewal-hooks/deployに置いておいた。
最後に、WordPress側の設定もhttpsに変更して、各記事中のURLもSQL(phpMyAdmin)でhttpsに置換してやって、移行はたぶん完了。
UPDATE `wp_posts` SET
`post_content`=REPLACE(`post_content`, "http://www.tapoblog.0t0.jp", "https://www.tapoblog.0t0.jp")
WHERE `post_content` LIKE "%http://www.tapoblog.0t0.jp%"