今日の昼近くから、突然、LinuxのJoplin(デスクトップ版)が同期エラーになった。エラーメッセージは"certificate has expired"(サーバの(SSL)証明書が期限切れ)だった。いやいやいや、証明書はちゃんと定期更新されているし、ブラウザもカレンダーもAndroid版Joplinも問題ないのだが・・・

それで、試しにJoplinの設定で証明書エラーを無視するようにしたら ちゃんと同期するので、それで(何かわからないが、悪いところが)直るまでしのごうかと思ったが、気分が悪いので調べてみた。すると、思わぬところに原因があった。

Joplinのフォーラムでは、例によって「Joplinは証明書は使っているだけだから知らねーよ他が悪い」みたいな回答があったが、更に調べると、Joplinを動かしているElectronの問題で、他にも困っている人が多そうだった。Electronはメモリを食う(しかも、まず解放しない)から大嫌いなので原因までは調べなかったが、大方、証明書の格納領域が小さい(僕が使っているサーバの証明書は、Let's Encryptのものなので3段階になっている)とかなのだろうと想像している。

ただ、なぜ今になって急に出たのかは謎だ。もしかしたら、昨日Joplinを更新したのが関係あるのか(だったら、Joplinにも何か原因があるはずだ)。

それで、暫定対処方法が分かり、どうにか、上記の証明書エラーを無視する設定を解除してもエラーが出なくなった。こういう分かりにくいところが駄目になると探すのが大変で、まったく疲れる・・・

参考までに、関連するページを僕が参照した順に載せる(()内は投稿時期(JST))。

対処のポイントは、上に書いたように、証明書が3段階になっているのが悪いから減らすことのようで、証明書を作成・更新する時に中間の(あるいは余分な)証明書を削ればいいようだ。※ 中間のものは必要だから入っているはずなのに、どうして削っても問題ないのか まで考えるつもりはないが、確かにちゃんと動いている。中間の(あるいは余分な)証明書を削っても、削ったものが最後(「最初」のほうが正しいかも)の証明書に含まれているようなので、それでいいのかも知れない。

※例えば、(僕は使っていないが、)certbotには以下のように指定する(webサーバにnginxを使っている場合)。太字部分の指定で中間の(あるいは余分な)証明書を削るようだ。

sudo certbot certonly --nginx -d <domain> --preferred-chain "ISRG Root X1"

他に、試してはいないが、webサーバの証明書ファイル(例: "fullchain.crt")の中の2番目のブロック("-----BEGIN CERTIFICATE-----"と"-----END CERTIFICATE-----"に挟まれた部分)を削ればいいのではないかと想像している。

 

(10/2 5:04 わずかに修正)

  •  1
  •  0

コメントを書く / Write a comment

名前 / Name    

メール / Mail 

URL