SSL証明書の自動更新

我が家のサーバーは昨年、Let’s Encrypt の無料証明書を使って、SSL化しましたが、そのとき、win-acme というツールを使いました。

仕事上のサーバーで使っている証明書は、通常1年。長いもので3年くらいの契約で、契約更新時に都度証明書をダウンロードしてApacheに設定するというような作業をしていますが、Let’s Encrypt は、いろいろ事情があって、3ヶ月に1回更新作業をしなければなりません。

win-acme には、自動化する方法もあるにはあるのですが、FTPサーバーを用意するとかいろいろ手順が面倒で、あまり時間が無い時に試していたこともあって、面倒になって、結局手作業で更新することにしました。 最初は、renew でコマンドを叩けば良いのかと思ってバッチ設定していたのですが、どうも、毎回DNSの TXT を新しい値で更新しなければならず、我が家の場合は、hajimesan.net / soundwalking.com / www.soundwalking.com の 3つを更新するわけですが、TTLが5分になっているので、ツールをスタートさせ、表示された値をTXTに設定して5分待ち、ツールの実行を先に進めて、TXTを削除して(待つ必要はない)次のドメインへというのを3回。最低でも15分はかかるので、少し面倒でした。

それでも、セキュリティに関係するところだし、ある程度やり方を覚えておくためにも、3ヶ月に1回くらいはよいかなぁとは思って、今日も Let’s からメールが来たので、更新したところです。

先日私のドメイン管理を、ValueDomainから、GoogleDomains に移管したのをきっかけに、GW中に自動化しようかなぁと思っていたところだった(すっかり忘れていて、今日のLet’sからのメールで思い出した)ので、調べてみたところ、certbot というツールを使うと自動化できるらしいので、やってみました。

  • Windows コマンドプロンプトを管理者権限で起動
  • >winget cetbot
  • いろいろ聞かれたら、ちゃんと読んで Y を入力したりといったお決まりの手順あり
  • インストールが完了した時点で、PATHは、通ってました
  • >certbot certonly
  • 初回はメールアドレスなどを聞かれます。
  • How would you like to authenticate with the ACME CA?
    • 1)ローカルでHTTPサーバーを起動するか、2)既存のwebrootにチャレンジファイルを置くか聞かれるので、2)を選択。既にApacheが動いている環境で、WebRootにファイルを置いてインターネットからアクセスできる環境なら、2)になりますね。
  • どのドメインに対して発行するか、そのドメインの WebRoot はどこかを聞かれるので、回答。半角スペース区切りで複数入れられるようだけど、一つずつやったほうが吉
  • 最初まとめて3つ入れたのですが、我が家の場合、soundwalking.com と www.soundwalking.com は、実は同じなので、同じパスを入れたら、怒られました
  • もともと、Let’s Encrypt を使っていたせいかどうかわかりませんが、DNSとか何も設定せず、あっさり証明書を取得して、 c:\Certbot\live に保存されました。保存された各ファイルはc:\certbot\archive へのシンボリックリンクになっているようですが、これから更新していくと、archive に溜まっていくのかもしれません。httpd.conf で設定するのは、live の方が良いでしょう。
  • 例えば、hajimesan.net なら、次のように設定しました。
    • SSLCertificateFile “C:/Certbot/live/hajimesan.net/cert.pem”
    • SSLCertificateKeyFile “C:/Certbot/live/hajimesan.net/privkey.pem”
    • SSLCertificateChainFile “C:/Certbot/live/hajimesan.net/chain.pem”
    • >certbot renew で、更新
    • 今日取得したばかりなので、更新対象がありませんとなりますが、7月ごろになったら自動更新されるはずです。(たぶん)
    • とりあえず、タスクスケジューラで、 certbot renew を毎週月曜日に実行するようにしてみました。
    • certbot renew の後に、httpd.exe -k restart も入れました。

これでうまくいくかどうかは、7月にわかります。

うまくいかない?

更新タイミングになったので、確認してみましたが、更新されていません。

手動で更新しようとして、certbot renew を叩いてみましたが、

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing C:\Certbot\renewal\hajimesan.net.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for hajimesan.net and soundwalking.com
Failed to renew certificate hajimesan.net with error: Missing command line flag or config entry for this setting:
Select the webroot for hajimesan.net:
Choices: ['Enter a new webroot', 'x:\\......\\xxxxxxx\\soundwalking']

(You can set this with the --webroot-path flag)

何故か hajimesan.net なのに webroot が soundwalking …. なんだこれは?と思って、調べてみたら、 hajimesan.net.conf と hajimesan.net-0001.conf だったか2つファイルがあって、どうやら最初に試しでいろいろやっているうちに設定ファイルが2つもできて、そのうちの hajimesan.net.conf の方の webroot が soundwalking になっていました。一旦 -d で両方とも削除して、作り直したのですが、今度は、webroot セクションが空っぽ。どこかに覚えているのか、certbot certonly した時もwebrootを聞かれずに完了してしまいました。仕方ないのでテキストエディタで開いて自分で [[webroot_map]]セクションを追加。とりあえずうまくいったけど、これで良かったのかどうか。

自動更新は失敗したけど、手動でやるにしても、winacme に比べたらずっと楽。DNSサーバーの設定変えずにコマンドだけで更新できるのはありがたいです。

わかるのは、次の更新の10月 (^^;

(追記) 2023/11/23 のバッチで自動更新されていました。

カテゴリー: Computer IT, Web パーマリンク