この記事を読もうとしている方へ
すみません、技術的に高度なことは書いてありません。
もし万一、私と同じことでハマっている人がいて、この記事が解決のヒントにでもなればいいなと思っています。
与えられた要件について
は、動画を限定公開する際にひっかかったこと1を参照のこと。
一方そのころ公開用webサーバでは
こんな手順を進めていた。
まあ落ち着いて。リトライする前にちょっとエラーメッセージを読もうよ
certbot-autoを起動すると、何度やってもエラーになる。しまいには短時間に何度もエラーになったんでしばらくロックがかかってふて寝したり。
メッセージをよく読んだら(最初に読めよ)には「80番にアクセスしたらhttpsが応答するんであんたのことは信用できない(意訳)」と書いてある。
待て待て、それはもう散々やって、だから先述の手順じゃないの。いまは、80番にアクセスが来たら素直に80番で応答する設定のはずでしょ。
ほうぼう検索して回った挙句に
英語の掲示板にたどり着いて、HSTSが悪さしてるんじゃないの、と。
その掲示板での質問者は「そっかわかった!じゃあもHSTSやめるわっ!」と宣言して戻ってこなかったけどそのあと「maxage=0に設定して証明書を取得、そのあと戻せばいけるんだけど…」というレスがそっとついていた。
というわけで
- 取得済みのドメインに関してDNSを変更、newhost.hoge.com(たとえばね)を当該サーバーに向けておく
- ドキュメントルート用のディレクトリを準備して
- .confファイルを書いて(80番ポートをシンプルに受けるだけ=この時点ではhttpsへの転送も書いていない)
- .confファイルを修正(HSTSのmaxage=[大きな数]をmaxage=0に書き換え)httpdを再起動
- certbot-autoを起動して証明書を取得(サイトの存在確認のため指定したホストの80番ポートにアクセスする)
- .confファイルを書き換えて(80番へのアクセスをhttpsの同パスに転送、443を受ける、証明書の指定)
- .confファイルのHSTSに関する記述をmaxage=[大きな数]に戻してhttpdを再起動
という手順となりました。めでたしめでたし。
しかし残る疑問
証明書の新規取得なんだからhttpsに転送されたら信用できない、というスタンスは、まあわかる(ドメイン/ホストの存在は確認できるんだから別にいいじゃねえかとも思うが)。
ただ、HSTSはそのサーバーがリターンコード301や302を返しているわけではなく、その仕様にのっかるかどうかはユーザーエージェント(この場合だったらcertbot-autoに呼び出されるホスト存在確認用のクローラー)の実装しだいではないのか。
30xでのリダイレクトにせよHSTSにせよ、それを用いた証明書の不正取得が想定されるから禁止しているのだろうと想像するのだが、具体的にどういう不具合があるのかは想像できず、釈然としない思いが残る。