10/18に Let's Encryptの SSL証明書の有効期限が切れてしまい、自分自身も Webサーバーにアクセスできなくなっていました。
有効期限が迫っていることは認識していたので、その前に更新しようとしたのですが、
ValueError: Requesting acme-v02.api.letsencrypt.org/directory: Name does not resolve
というメッセージが出て更新できません。 どうやら名前解決ができなくて Let's Encryptのサーバーに到達できないようです。
Let's Encryptを更新できない原因究明も必要ですが、まずは応急処置として SSL証明書をなんとかしなければなりません。
SSL証明書を発行している有料サービスは多いですが、SSL BOXで「クラウドSSL」(1,650円/1年間)を買ってみることにしました。
ユーザー登録をしたあと、新規取得で先に決済(クレジットカード or プリペイド)します。
その後、証明書の申請手続きに入るのですが、そのためには CSR(証明書署名要求)が必要です。
昔、自己署名のSSL証明書を作成して使っていたので、ある程度はわかります。
ターミナルで Webサーバーにログインして、適当なディレクトリ(例えば /usr/local/etc/ssl)に移動して 2048bit長の秘密鍵を作ります。
$ openssl genrsa -des3 -out server.pass.key 2048
...
Enter pass phrase for server.pass.key:
Verifying - Enter pass phrase for server.pass.key:
入力したパスフレーズは忘れないように。
$ openssl rsa -in server.pass.key -out server.key
Enter pass phrase for server.pass.key:
作成したままの秘密鍵だと Apacheが起動するたびにパスフレーズの入力を要求されるので、それを解除します。
$ openssl req -nodes -new -key server.key -out server.csr
秘密鍵を使って CSRを作成します。 できた server.csrを「クラウドSSL」の CSR入力欄に貼り付けます。
他にも「クラウドSSL」の申請画面には分かりづらいところがあります。
「承認メールアドレス」という項目があるのですが、これは申請後に送られてくる承認メールを受け取るアドレスです。
アドレスの選択肢は申請ドメインの whois情報に登録されたアドレスか、申請ドメインのメールサーバーのアドレスに限定されています。
ウチのドメインはメールサーバーは運用していないし、whoisへの登録はレジストラ(VALUE DOMAIN)のアドレスに変えてあるので、このままでは承認メールを受け取ることができません。
仕方ないので一時的に whois代行を解除して 自分のメールアドレスで登録しました。
一日おいてから「クラウドSSL」の申請画面にアクセスすると、リストに自分のメールアドレスが表示されました。
氏名以下の入力欄は、何でもいいので適当に入力していればOKです。
発行された CERT(SSL証明書)と中間証明書(CA)を Webサーバーへ持って行って、/usr/local/etc/apache24/extraの httpd-ssl.confに記載します。
SSLCertificateFile "/usr/local/etc/ssl/blog_20231020.cert"
SSLCertificateKeyFile "/usr/local/etc/ssl/server.key"
SSLCertificateChainFile "/usr/local/etc/ssl/blog-ca_20231020.cert"
Apacheを再起動すれば、SSL証明書が読み込まれて Webにアクセスできるようになりました。
Let's Encryptは無料なのはいいんですが、有効期限が3ヶ月しかないので頻繁に更新が必要で面倒です。
自動更新するようにもできますが、面倒なのでやっていませんでした。 もっとも名前解決ができなければ自動更新も作動しないわけですが。
年額1,650円という費用をどう考えるかですが、更新頻度が年に 1回なら有料でも悪くないかもしれませんね。
せっかく買ったので 1年後までに「クラウドSSL」を継続するか、Let's Encryptに戻すか判断したいと思います。