Raspberry Pi + WordPress のHTTPS化(Let's Encrypt)

早速ですが、ここではタイトルにある通りRaspberry Pi ににインストールされたWordPressのサイトのHTTPS化について書いていこうと思います。

書き方を容易にしていますが、難しく書いてもわからにくいのと、そこまで踏み込んだ話を実際の運用において必要ないので、なんとなくわかるぐらいのもので書いておくことをご承知ください。

では軽い説明だけしてHTTPS化をしていきましょう!

HTTPSって?

おそらくこのページにたどり着いたということは、自分のサイトがHTTPで表示されているかと思います。

HTTP

chromeだとこんな感じですね。

Chromeだと「保護されていない通信」と出てくるのですぐわかるかと思います。これがHTTPの状態なのです。

「保護されていない通信」とありますが、具体的に何が保護されないのでしょうか?

本当にそのままの意味で、通信パケットを見るだけで何の情報をやりとりしているかがわかってしまいます。通信パケットって何?簡単に見れるの?と思うかもしれませんが、かつてはよく耳にしたパケットだと思ってくれて大丈夫です。簡単にいう意図通信データです。

見るのも実は簡単です。そのためのツールを入れれば簡単に見れますし、Wi-Fiって電波でパケット飛ばしているわけですが、実はこの電波には他の人のデータも一緒に乗っているんですよ。このデータがHTTPの状態だと暗号化されていない状態(用語では平文なんて呼びます)でやりとりをしています。例えばこのサイトと通信したときに、この今見ている文字がそのまま見えるような状態になっているということです。これが家の中で盗み見られて困りはしないかと思いますが、もし外で、インターネットショッピングをしてるときにクレジットカードの情報がそのままやり取りされていたら…と思うとぞっとしませんか?

だからこそ今httpからhttpsに移行しようという流れがきている(きていた)わけです。

ごく簡単に一言で表すなら、「危ないからhttpsにする」というだけなんです。

HTTPS

対してHTTPSは送るデータを暗号化したうえで送信します。たとえこれがほかの人に見えても何が書いてあるかわからない、パケットを見られても何をしているかわからないじょうたいになります。インターネットショッピングしても、クレジットカードの番号も、買ったものもわかりません。

簡単にどんなことをしているかというのを説明すると、「鍵」とよばれる、暗号化したりそれを読み解くためのデータを設定して、それをお互いにやりとりすることで、安全な通信を実現します。用語では「公開鍵」や「秘密鍵」と呼ばれるものを用いて暗号化するので詳しい理屈が気になるという方は。、ここら辺の単語で調べたらいいかと思います。ここでは難しいお話は省きます。「鍵」とは言いますが、当然コンピュータ上の鍵なので文字列の塊です。

WordPressのサイトをHTTPS化

では実作業のほうに映っていきたいと思います。必要になりそうな私の実行環境のほうを書いておきます。

  • Raspberry Pi 3B+
  • Raspberry Pi OS(旧Raspbian ) buster 32bit
  • Apache 2
  • PHP 7.3
  • WordPress 5.4.3
  • DDNSを設定していること

大前提としてDDNS(example.comみたいな)を設定していることが大前提となりますので、ここは注意してください。(IPアドレス:123.456.789.000みたいなのはだめです)

今から示す手段はおそらくDebian系のOSならどれでも大丈夫かと思います(未検証)。いくつかRaspbery Piで実行しているサイトのコードを拝見したのですが、リポジトリに追加したりめんどうな感じでしたが、この方法は自分でもびっくりするぐらい簡単でした。

上に長々書きましたが、コード打ち込んでその通りに操作してもらえれば導入できるかと思います。

でははじめにパッケージをインストールし、certbotを実行します。

$ sudo apt-get install certbot
$ sudo apt-get install python-certbot-apache
$ sudo certbot --apache

すると英文で色々出てくるのですが、とりあえず書いている通りに進めてくれれば問題はなく設定できます。ただ好みの部分やセキュリティのこともあるので、よく読んだうえで操作していただいたほうがいいかと思います。ひとまずは下の通りに聞かれたら答えれば大丈夫です。最後のホームページのアドレスは自分のものと置き換えてください。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):メールアドレスをここに入れてください
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel):thunsukevpn.clear-net.jp

ここからwebサイト設定に入ります。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):2

http://~からhttps://~にリダイレクトするかどうかを聞いています。リダイレクトしないなら「1」を、リダイレクトするなら「2」を選択してください。わからないとかであれば基本的には2でいいかと思います。

もしリダイレクトしない「1」だと、httpアクセスが拒絶されるので、今までhttpのアドレスでページを訪れていたユーザーが来れなくなってしまいます。今からwebページを作るなら1でもいいかもしれません。開けておくポートは少ないに越したことはありませんしね。

あとはこれを入力したら以下のような表示が出れば終わりです。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/thunsukevpn.clear-net.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/thunsukevpn.clear-net.jp/privkey.pem
   Your cert will expire on 2020-10-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

実はこの時点でwebサイトのhttps化は完了しています。今までアクセスしていた自分のhttpのサイトのURLを入力すると、

もうhttps://~になってる!

これほど簡単に終わるとは自分でも思っていませんでしたが、まだやることが残っています。

というのも「HHTPSって?」っていう項で書いていた「鍵」なんですが、これは安全の都合で3か月で有効期限が切れるようになっています。なので更新を3か月ごとにしないといけないのですが、これを手動で更新するのは面倒です。自動化しましょう。

始めに以下のコードを実行して、鍵の更新が正常にできるかを確認します。実行結果一緒に乗せていますが、以下のようになれば大丈夫です。

$ sudo certbot renew

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/thunsukevpn.clear-net.jp.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/thunsukevpn.clear-net.jp/fullchain.pem expires on 2020-10-26 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

これを定期実行できるcornというものに登録します。

crontab -e

これを実行するとcronの編集画面になります。その前に初めてcrontabを実行すると、1,2,3のどれかを選ぶように指示されるかと思いますが、そのままEnterするか1を選べばnanoっていう一番普通の人にはわかりやすいエディタが開くのでそれをつかってください。(Linuxに慣れてる人は好きなエディタがあると思うので割愛)。

さてcrantabを実行すると、青い文字(がデフォルトだと出てきますがいじっていたら知りません)が出てくると思うので、一番下に以下のような形で追記します。

0 3 * * 0 certbot renew

これがcornへの書き方なのですが、細かいことは割愛して必要そうなところだけかいつまんで説明します。

一番左の0分:0~59
3がある場所時:0~24
右の0曜日:0~7(0,7が日曜日)、それ以外にもsun monなど英語の3文字の表記でも可
certbot renewコマンド:ターミナルで入力できるコマンドをここに書けば上で指定した時間にそのコマンドを実行
cron表記の一部

こんな感じになっています。なので、うえで書いた例を読み解くと、「毎週日曜日、午前3時0分に"certbot renew"を実行」となっています。鍵の更新の時間を変更したければ上の表に従って変更してください。

余談ですが、以下のようにすればその時間に再起動とかもできたりします。

1 4 * * * reboot

*はワイルドカードと言ってなんでもよいことを示します(厳密には違いますがcronではそういう意味だと思ってください)。なので「午前4時1分毎日"reboot"」を実行ということですね。非常に便利なものなのでよければ覚えていてください。Linuxなら全般使えます。

これで設定まわりは終わりなので最後に、WordPressの設定だけして終わりにしましょう。

まず管理画面にログインして、リンクの設定をらいてください。そこでWordPressアドレスとサイトアドレスの先頭をhttps://に変えましょう

このページでhttps://の形に変更しましょう

これを以下のように変更したらおしまいです。

これで終わり!

説明が長めでしたが、工程は少ないので簡単です。お疲れさまでした。

これでWordPressでブログを書き始める準備が全て終わったことになります。よいブログライフを。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です