web-dev-qa-db-ja.com

421誤ったリクエスト

次の421エラーが時々発生します。

誤ったリクエスト

要求されたホスト名がこの接続に使用されているサーバー名表示(SNI)と一致しないため、クライアントはこの要求に新しい接続を必要とします。

ただし、ブラウザを更新するとエラーがクリアされ、ページは正常に読み込まれます。次回のページのロードではエラーが発生せず、そのためパターンはかなりランダムに見えます。私が見ることができる唯一のパターンは、header( "Location:"。$ url);を使用してページをリダイレクトしているときに発生する可能性があることです。

ComodoからのPositiveSSLマルチドメイン証明書を持っています。私のサーバーは共有WebホスティングサービスのApacheなので、設定にアクセスできません。

1つのドメインからページを読み込み、ページ内に証明書の2番目のドメインへのリンクがあります。

このエラーに関して私が読んだことはすべて、この問題がマルチドメイン証明書であることに関連しているこの問題を指摘しているようです。

私が知りたいのは、これを引き起こす可能性のあるもの(そして修正できるもの)のコーディング側にWebページ(php)の何かがあるかどうか、またはそれが構成エラーまたはおそらくサーバーエラーであり、私のホスティングサービスだけができることです修理する。

私のホスティングサービスはこれまで何も提供することができず、彼らがそれを調査できるように、次に発生する正確な時間をコールバックすることを要求しました。彼らがこれを理解できると私が確信しているわけではないので、どんな助けもありがたいです。

[〜#〜]更新[〜#〜]わかりました、ほぼ2年後、それに対処する時がきたと判断しました。画像とJavaScriptを提供する静的ドメインを削除することで、ほとんどの問題を解決できました。しかし、私はまだこのコンテンツの一部に2番目のドメインを使用しており、特にSafariはまだ問題を抱えていました。

私はより多くの研究を行い、- ここでそれについて話す という別の記事を見つけました。 @Kevinが正確に説明していること。記事はそれがSafariで起こることを確認しました。そこでアドバイスを受けて、ドメインごとに個別の証明書を取得することにしました。私は共有ホスト(Webhostinghub)にいて、自動更新される無料のSSL(AutoSSL)を提供していることを発見しました。本当であるように思えた。彼らは私に5つの無料の証明書を設定しました。ここまでは順調ですね。静的ドメインを再度有効にしてテストすることもできます。これで問題がなければ、ボーナスとして起動するために$を節約し、Comodoの証明書を7月に期限切れにします。

10
mseifert

これは、次の一連のイベントによって発生します。

  1. サーバーとクライアントの両方がHTTP/2をサポートし、使用します。
  2. クライアントはfoo.example.comでページをリクエストします。
  3. TLSネゴシエーション中に、サーバーはfoo.example.combar.example.comの両方に有効な証明書を提示します(クライアントはそれを受け入れます)。これは、ワイルドカード証明書またはSAN証明書で実行できます。
  4. クライアントは、接続を再利用してbar.example.comをリクエストします。
  5. サーバーがクロスドメイン接続の再利用をサポートできない、またはサポートすることを望まない(たとえば SSLの設定が異なるため 、ApacheがTLS再ネゴシエーションを強制するため)、 HTTP 421を提供します。
  6. クライアントは新しい接続で自動的に再試行しません(たとえば、 Chromeバグ#546991 を参照、修正済み)。 関連するRfC は、クライアントが再試行する可能性があることを示しており、SHOULDまたはMUSTであることを示していません。再試行に失敗することは特にユーザーフレンドリーではありませんが、デバッグツールまたはHTTPライブラリにとって望ましい場合があります。

イベント#6は制御不能ですが、サーバーのソフトウェアによっては、#5は修正できる場合があります。サーバーがHTTP 421を送信する方法とタイミングの詳細については、サーバーのHTTP/2のドキュメントを参照してください。別の方法として、ドメインごとに個別の証明書を発行することもできますが、管理オーバーヘッドが増えるため、価値がない場合があります。 HTTP/2を完全にオフにすることもできますが、ほとんどの場合それはやり過ぎです。

13
Kevin

多分これは誰かに役立つでしょう。

Apache仮想ホスト構成をHTTPSに変更しようとしたときにポートが80から443に変更され、追加するのを忘れたときにこのエラーが発生しました

   SSLEngine on
   SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
   SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"

エラー421を引き起こす構成:

<VirtualHost mydoamin.local:443>   <-- fistly I 
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
</VirtualHost>

正しい構成:

<VirtualHost mydoamin.local:443>
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
       SSLEngine on
       SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
       SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
</VirtualHost>
1
Radek Daniluk