force_https を有効にするための証明書検証テストが壊れており、オンになるべき時にオフになっている

編集:これをバグに変更します。Force_https が以前オンだったサイトでオフになっており、それが問題を発生させています。


「アップロードが機能しない」というサイトを長い間デバッグしていました。再構築、セーフモード、非標準プラグインの検討など、明らかな事項を一通り確認した後、ついに混合コンテンツの警告に気づき、force_https をオンにしたところ、問題が解決しました。

一、二年前のどこかで force_https がデフォルトでオンになっていたと思っていたのですが、最近何度か、force_https がオンになっていないために機能が壊れているという話を聞いたり(あるいは目撃したり)しました。

デフォルトでオンにしない理由はあるのでしょうか?
[/quote]

「アップロードが機能しない」というサイトを長い間デバッグしていました。再構築、セーフモード、非標準プラグインの検討など、明らかな事項を一通り確認した後、ついに混合コンテンツの警告に気づき、force_https をオンにしたところ、問題が解決しました。

一、二年前のどこかで force_https がデフォルトでオンになっていたと思っていたのですが、最近何度か、force_https がオンになっていないために機能が壊れているという話を聞いたり(あるいは目撃したり)しました。

デフォルトでオンにしない理由はあるのでしょうか?

「いいね!」 1

有効な証明書が存在する場合は、discourse.conf自動的に有効 になります。
これは確かに 1〜2 年前からです。

grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"

「いいね!」 1

ああ、ありがとう、リチャード。

私が変なことを考えているわけではないんだね。

問題は、有効な証明書かどうかのテストが失敗していることだ:

# openssl verify -CAfile ca.cer fullchain.cer 
O = Digital Signature Trust Co., CN = DST Root CA X3
error 10 at 3 depth lookup: certificate has expired
error fullchain.cer: verification failed

そして、mozilla/DST_Root_CA_X3.crt/etc/ca-certificates.conf から削除し、update-ca-certificates を実行すると、次のようになる:

C = US, O = Internet Security Research Group, CN = ISRG Root X1
error 2 at 2 depth lookup: unable to get issuer certificate
error fullchain.cer: verification failed

ブラウザでは正常に表示されている。そして、このコンテナは今日再構築したばかりだから、最新のルート証明書が入っているはずだ。

この証明書に関する知識が不足していて、何が起きているのかよくわからない。コンテナ内から Let’s Encrypt の証明書を curl で取得することはできる(先週作業していた WordPress コンテナではこのテストが失敗していた)。

今回は私だけではないようだ。最近、force_https を有効にすることで問題を解決した人が 何人かいる

「いいね!」 1

はい、これは LetsEncrypt ルート証明書の有効期限切れ と関連している可能性が高いです。特に、先週金曜日以降にこの問題が発生し始めた場合はそうです。

(Docker コンテナ内で)openssl version を実行するとどのような表示になりますか?(こちら の内容に関連して)。

「いいね!」 2
OpenSSL 1.1.1d  2019年9月10日

つまり、「ISRG Root X1 を信頼ストアに追加する」必要があるのかもしれません?しかし、ca-certificates.conf 内に mozilla/ISRG_Root_X1.crt が存在しているようです。

「いいね!」 1

OMG。2 日間、Rails、Ansible、Python の間で複雑な問題が起きていると誤解してデバッグに費やしていましたが、実は以前 force_https が有効だったサーバーが今は無効になっており、多くのリクエストが https://myserver ではなく http://myserver に送信されていたことが原因でした。

これはバグのように思えます。

「いいね!」 2

はい、これは確かにバグです。

先週、フォーラムを別のサーバーへ移行する際に、LetsEncrypt の再発行制限(同じホスト名に対して週最大 5 回)に抵触しました。当初は原因がわかりませんでしたが、このバグによりビルドのたびに証明書が再発行され、5 回目にレート制限に達しました。しかし、以前の証明書がサーバーに残っていたため、何も警告は発生しませんでした。

フォーラムを新しいサーバーに移行したところ、新しい証明書が取得されませんでした。古いサーバーからコピーすることはできましたが、何が原因だったのかには気づきませんでした。

acme.sh2.9.0 に固定 されていますが、master ブランチは 3.0.1 であり、デフォルトのチェーンを設定する機能 が追加されています。これが関連している可能性があると推測しています。

「いいね!」 3

@Falco さん、これをご覧いただけますか?この件については、あなたの方が詳しいようです。ここ1〜2週間で数時間かけていろいろ試してみましたが、いまだに何が起きているのか理解できていません。

「いいね!」 1

はい、週末に自分で割り当てました。こちらでは長期休暇の週末ですが、今週できるだけ早く確認いたします。

「いいね!」 2

ああ、その部分を見落としていました。お騒がせしてすみません。

長い休暇の週末がちょうど終わり、アパレシダの聖母の日が私のカレンダーに載っていなかったのです。でも、今わかりました。

ありがとう。

「いいね!」 2

これは以下のコミットで修正されています。

「いいね!」 5

@Falco さん、この件でのご尽力に感謝します :slight_smile:

「いいね!」 2