421 Misdirected Request errors ではまる

macOS の Safari で、https://www.manabii.info/ のリンクから、https://ipv6.manabii.info/ へ遷移した時に「421 Misdirected Request errors」が表示されて、散々悩んだのだけれど、解決したメモ。

原因は、サーバ側で Apache において SNI と HTTP/2 とワイルドカード TLS 証明書の条件が重なっていたからのようだ。

具体的には、以下のような構成を取っていた。

  • サーバ側では HTTP/2 と HTTP/1.1 を利用可能としていた。
  • TLS パラメータは下記証明書を除き、全てのバーチャルホストで同じとしていた。
  • https://www.manabii.info/ ではコモンネーム「*.manabii.info」というワイルドカード証明書を利用。
  • https://ipv6.manabii.info/ では、https://6.ipv6.manabii.info/ というホストもあるので、コモンネームが「ipv6.manabii.info」で、SANsに「6.ipv6.manabii.info」が入ったマルチドメイン証明書を利用。

ところが、macOS の Safari (HTTP/2 対応) において、https://www.manabii.info/ を表示した後に https://ipv6.manabii.info/ を表示するパターンで、表題のエラーが発生していた。

つまり、ブラウザで https://www.manabii.info/ を表示した後で、https://ipv6.manabii.info/ を表示するとき、HTTP/2 では www.manabii.info で使用した既に開いている通信を利用するので、*.manabii.info のワイルドカード証明書での TLS 接続状態で ipv6.manabii.info にアクセスしようとするための模様だ。

解決方法としては、以下の通り。

  • https://ipv6.manabii.info/ のバーチャルホストでは、*.manabii.info のワイルドカード証明書を使い、6.ipv6.manabii.info の ServerAlias は削除する。
  • https://6.ipv6.manabii.info/ を別のバーチャルとして設定し、コモンネームが「6.ipv6.manabii.info」の証明書を使用する。

HTTP/2 の SNI では、SSL パラメータは全てのバーチャルホストで同一とする必要があるのは知っていたのだけれど、まさか上記のような罠があるとは。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です