僕のサーバーのSSL/TLS証明書(以下、証明書)が来月切れる。今までは、ほぼ唯一無料のStartComのを使っていたのだが、毎年の更新が意外に手間(サイトにサーバの情報を登録したり(これが間違いやすい)、証明書のフォーマットを変換したり(毎回手順を検索する))で、面倒に思っていた。それで、近頃流行り出してきた無料証明書のLet's Encrypt(以下、LE)を調べたら、証明書の期限は短い(90日)が、自動更新するツールが配布されているから更新の面倒がなくなりそうなので、試してみることにした。そして、いつものように問題が勃発し、検索しても出て来なかったので、一部始終を書く。

まず、公式の自動更新ツール(certbot)を調べたら、使っているwebサーバ(調べれば簡単に分かりますが、一応伏せます)には対応していなかったので、いくつかを調べてみて、設定が柔軟そうなGetSSLを使うことにした。

最初の問題は、今使っている証明書の期限がまだ充分残っているため、証明書の更新処理が実行されないことだった。これは、更新する残期限の下限(RENEW_ALLOW)を増やすことで回避できた。

次は、サーバの確認用に使うファイルに外部からアクセスできずに、確認できない問題が起こった。これは、そのファイルのディレクトリへのアクセスをサーバが拒否するように設定していたためだったので、設定を変更して対処した。

他にも細かい問題はあったが、ようやく証明書が取得できた。と思ったら、LEの証明書を使うとブラウザが「証明書が不正だ」という警告を出す。再度GetSSLの説明を読むと、テスト用(staging)のサーバから証明書を取得したためであることが分かったので、GetSSLの設定を変更して、正式な証明書を取得できた。

それで、一通りの動作確認をしたところ、PCのブラウザやiPhoneでは問題ないのだが、Lightning(Thunderbird)でスケジュールやアドレス帳を同期する際に、「証明書の発行者が不明で証明書の有効性の検証ができなかった」のような警告が出る。元の証明書に戻すと直るので、証明書がおかしいようだ。

GetSSLの設定を変えてみたり、セキュリティソフトのファイアウォールを一旦切ってみたり、Thunderbirdを再インストールしたりしてみたが、効果はなかった。

それで、証明書の発行者が不明というメッセージから、LEの証明書の発行者がThunderbirdに登録されていないのではないかと考えた。Thunderbirdは最新版なので、考えにくいことではあったが、一応、サイトからルート(X1)と中間証明書(X3, X4)をダウンロードして登録した。が、それでも駄目だった。更に、別の証明書更新ツール(acme.sh)を試してみたが、やはり同じエラーになった。

「これはもう、仕方ないから一生StartComで我慢するか。悲しいけど。」と思ったのだが、ふと、LEのルート・中間証明書の登録方法が間違っていたような気がした。Thunderbirdの証明書登録画面には、「サーバ証明書」と「認証局証明書」などのタブがあり、さっきは何も考えずにサーバ証明書のタブに登録したが、認証局証明書に登録するのが正しいのではないかと考えた。

それは正しかった。一旦、サーバの方に入れた証明書を削除してから、認証局の方に登録し直したら、無事、Lightningが同期できるようになった。

これで、ひとまずLEの証明書で運用できることが分かったので、証明書を定期更新する処理をサーバに追加したり、細かい設定や調整をしたりして、作業は終わった。あとは、今使っている証明書の期限が来る前に自動更新が行われれば問題ない。

今回の問題の根本の原因は、LEから取得したサーバ証明書の証明者"Let's Encrypt Authority X3"の証明書がThunderbirdに登録されていなかったことだが、開発元のMozillaはLEを共同で設立したと書いているので、とても不思議なことだ。検索しても同様の記事は見当たらなかったので、僕だけの問題なのかも知れない。どこかで何かが壊れてしまったのだろうか。ただ、Thunderbirdを再インストールしても回復できなかったのは腑に落ちない。

結局、この作業と問題解決に6時間くらい掛かっただろうか。以前書いた、「1度しかしないことでも自動化したい。自動化するために、却って時間が掛かってもいいし、間違いがあってもいい。」に当てはまる。年に1度の手間(1時間程度?)を省くために、結構な手間を掛けて疲れてしまった(単純計算すると6年分だw)。が、最終的にはうまくいったので問題ない。

PS. "Let's Encrypt"を見るとベッキーの顔が浮かぶので調べたら、「レッツ・ポジティブ!」だったw

PS2. 真面目な話を書くと、こうして「みんなで暗号化」することに、どういうメリットがあるのか、今一つ理解できない。というのは、自動化された手順で誰でも簡単に無料で証明書を取得できるのなら、悪意を持ったサーバだってどんどん証明書を使い出すだろうから、「証明」の意味が薄れるし(実際、この仕組みではほとんど何も「証明」していない: そのドメインに何らかのwebサーバがあることだけだ)、暗号化にしたって、どこかの政府に鍵が流出して解読されまくる可能性があるのではないだろうか。誰得なのか、今一つ理解不能だ。どこかの陰謀? 本格的なインターネット監視社会の到来? まあ、いいよ。別に。僕は捕まるようなことは書いてないので(というのは良くある間違いなんだけど、どうしようもないよね)。。。

PS3. StartComも慌てたようで、今(6/15)になってLE対抗の証明書自動更新サービスを出してきたのだが、ちょっと遅かった。戻すのが面倒だ。。。でも、有効期間が最大39か月ってのはいいかも知れない。ただ、LEは90日間だって自動更新で手間は全然掛からないんだから、別にありがたくないのか? ま、StartComは「あぐらをかいていた」ってことだ。そして、証明書の更新が面倒なことに気付くのが少し遅かった。LEがスタートしてから1年近くあったのにな。(6/15 19:48)

(17:43 若干加筆・修正)

  •   0
  •   1

コメントを書く

名前    

メール 

URL