Let’s Encryptの設定備忘録
4年ほど前に知り合いから相談を受けて、はてなブログの操作を確認する為に無料版で公開し始めたところ、意外と書くテーマがあってコツコツ続けられたのでそこそこ記事がたまって来ました。
当初は操作性や機能を確認する目的だったのですが、独自ドメイン(サブドメイン)をDNSで割り当ててみたくなり、有料版(はてなブログPro)をすぐに使い始めたのですが、はてなの対応がイマイチ良くないこともあり、時代の流れ上当然であるSSL(HTTPS)にも対応してくれないし(今日現在まだ有料版のPROは対応していません。
しかも逆撫でする様に無料版はSSL対応済みだという現状・・)。これはダメだなと、はてなブログを捨ててWordPress環境に移すことにしました。少なくとももはやお金を払って使用する価値は私にはありません。契約期間が終わったらさいならです。
幸い、当サイトと同様に自前のWebサーバーはSSL対応の下地は出来ているし、IPv6対応も済ませているので、メインとなる面倒な作業はWordPressの動作環境を整えることと、既存コンテンツ(記事&画像)を移すことが課題でした。
当初思っていたよりも容易に移行出来たので一日で引っ越し出来ました。WordPressマルチサイトモードの検証という寄り道が無ければ半日で終わったかも知れません。複数のサイトをまとめるためにWordPressマルチサイトモードに期待していたのですが、パーマリンク動作が怪しいので今回はパスする事にしました。マルチサイトを必要とするユーザー数は圧倒的に少ないのでバグがまだ残っている可能性が高いと思います。
WebサーバーをSSL対応し証明書を設定する
さて二年ほど前に当サイトをSSL対応させた時の記録は端折っていてちょっと不安でしたが、結局Let’s Encrypt公式ポータルを参照しただけでSSL証明書の組み込みが出来ました。しかし物忘れも激しくなって来ましたし、先々きちんと思い出せるか自信が有りません。それに次回の作業はもっと時間短縮させたいので自分の為に要点だけ残しておきます。
自分なりに敢えて不要な部分は残さずわかりやすくしているつもりなので、この記し方が誰かに役立てば何よりだと思います。(だいた私のノートは子供の頃からこんな感じです。詳しい解説は教科書や参考書を読めば良いですからね。Let’s Encryptなら公式サイトに書いてある事が一番信用出来ます。)
前回の作業記録
当サイトをSSL(HTTPS)対応~Let’s Encryptで証明書代金はかからず/
Apacheの設定
下記は自分用にconfファイルの要点部分を抜き出してしか記してないので、手元のApache用confファイル(NameベースVirtualHost)に合わせて調整することは必要です。
## ポート80とポート443で受けられる様にしておいた
NameVirtualHost *:80
NameVirtualHost *:443
## ここも同様に80と443で受けられる様にしておいた
<VirtualHost *:80 *:443>
ServerName
ServerAlias
ServerAdmin
DocumentRoot
# Let's Encryptの鍵設定(鍵取得が終わるまで#でコメントアウトしておく
# SSLEngine on
# SSLHonorCipherOrder on
# Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
# SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5
#
# SSLCertificateFile /etc/letsencrypt/live/hoge.example.com/fullchain.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/hoge.example.com/privkey.pem
# ここはhttpアクセスをhttpsに転送する記述を追記
<Directory "/home/mydir/wp-hoge/">
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine on
# RewriteCond %{HTTP_HOST} ^hoge.example\.com
# RewriteRule ^(.*)$ [R=301,L]
</Directory>
Code language: PHP (php)
Certbotによる鍵取得
既にCertbotをインストールしてあるのであれば、下記のコマンドでLet’s Encryptから鍵を取得する準備が整っているはず。
$ sudo certbot certonly --webroot -w /home/mydir/wp-hoge -d hoge.example.com
Congratulationsのメッセージが表示されたら鍵の取得に成功しているので、鍵が保存されるであろうディレクトリ(/etc/letsencrypt/live)を確認するとサブドメイン名(hoge.example.com)のフォルダが生成されています。そしてそのフォルダの中に鍵ファイルが取得出来ています。Apacheのコンフィグはこれを示したに過ぎません。
ここまで確認できたら、confファイルの行頭#を外して、ApacheをreloadすればSSLエンジンが有効になって証明書が効力を発する様になります。
手順を整理しておく
- まずSSLでアクセス出来るようにしておく
Lets’Encrpytからコチラ向けにアクセスして来てSSLで接続出来ることを確認するらしいので、当然と言えば当然。もちろんこの段階ではオレオレSSL(証明書無し)で構わない。 - Certbotを動作させるコマンドでLetsEncryptに診断してもらう
診断結果がOKなら証明書を発行してくれて、Certbotが鍵をサーバー内に保管する。 - Apacheのコンフィグで証明書を有効にする
- 最後にhttpをhttpsにリダイレクトする行を有効にする
ちょっと手間はかかるけれどほとんど時間はかかりません。焦らずにサーバー切り替えの要点となるDNSの反映を十分に(数時間以上)待つ位でしょう。
最後に
前回と同様、自動化したCertbotがきちんと動作して、SSL証明書の期限切れ前に更新してくれことをチェックすれば放置できると思います。もちろんサーバートラブルに備える為にバックアップは欠かせませんが。
対話的に設定や更新を進めたい場合は、下記の様にletencryptを実行すれば選択式で手順を踏むことができます。最後にcertbot renewで反映される様です。
$ sudo letsencrypt
$ sudo certbot renew
前回参考にさせていただいたサイトをそのままこちらの記事にも残しておきます。
分かりやすい手順を記して下さっている方が沢山いらっしゃるので本当に助かりますね。
- Let’s Encrypt 総合ポータル
- 無償かつ自動でSSL(TLS)証明書を発行できる「Let’s Encrypt」とは?
- Let’s Encrypt サーバー証明書の取得と自動更新設定メモ | あぱーブログ
- WordPressをhttpからhttpsにSSL化した全手順まとめ(エックスサーバー環境)
/
コメント