5

Web サーバーで h2 (HTTP/2) を動作させようとしています。「ondrej」リポジトリ経由で Apache 2.4.20 をインストールしました。Debian 8 および Ubuntu 14.04 サーバーでテストしましたが、同じ問題が発生し続けます。OpenSSL 1.0.2 と SSL 仮想ホストを実行しています。

奇妙なことに、アップグレード ヘッダー (Connection: upgrade および Upgrade: h2) が送信されます。外部サーバーのテストを行ったところ、h2 が ALPN サポートで適切に動作しているという応答が得られました。しかし問題は、私がテストしたブラウザー (Win7 の Chrome と FireFox) が h2 にアップグレードしないことです。

欠落していることに気付いたのは、HTTP/2-Settings ヘッダーですが、これを実装したり、Apache にこのヘッダーを送信させたりするための Apache ドキュメントが見つかりません。

残念ながら、私がアクセスできるサーバーは HTTP/2 をサポートするバージョンをサポートしていないため、cUrl でテストできませんでした。

私のSSL vhost設定:

Protocols h2 http/1.1
SSLEngine On
SSLCACertificateFile xxxxxxxx
SSLProtocol all -SSLv2 -SSLv3
SSLCompression Off
SSLHonorCipherOrder On
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RSA+AES RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 !AES128"
Header always set Strict-Transport-Security "max-age=15552000;includeSubDomains"
SSLCertificateFile xxxxxxxx
SSLCertificateKeyFile xxxxxxxx

ワーカーではなく prefork モジュールを使用して Apache を実行しています。

何が悪いのか誰が教えてくれますか?

4

4 に答える 4

8

結局、私はそれを機能させました。「SSLChiperSuite」を次の文字列に変更するだけの問題でした。

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-A$

古いものには、いわば http2 をブロックするオプションがありました。私のSSLテストの評価はまだA +です。

于 2016-05-24T18:57:46.473 に答える
2

プロトコルにアップグレードすることはできません。h2

HTTP/1.1 アップグレード メカニズムは、クライアントによって開始されるものです。

私があなたを正しく理解していて、サーバーからクライアントにヘッダーUpgradeとヘッダーを送信しようとしている場合、それは意味がありません。HTTP2-Settingsサーバーではなく、クライアントがこれらのヘッダーを送信します。

さらに、HTTP/2 プロトコル自体は HTTP/1.1 へのアップグレード(プロトコル名の末尾にある にh2c注意) を介した平文通信を可能にしますが、ブラウザー ベンダーはこのメカニズムを実装しておらず、HTTP/2 プロトコルのみを使用します。 cALPN ネゴシエーション。

要約すれば:

  • HTTP/1.1 から HTTP/2 クリア テキスト ( ) にアップグレードできますが、これはnghttph2cなどの非ブラウザー クライアントでのみ可能です。これについては、こちらで説明しています。
  • アップグレード メカニズムはクライアントによってのみ開始され、クライアントはサーバーではなくUpgradeおよびHTTP2-Settingsヘッダーを送信します。
  • ブラウザは、ALPN を介した HTTP/2 のネゴシエーションのみをサポートしています ( h2)。これは、ブラウザとサーバーの間で平文の HTTP/2 を使用できないことを意味します。
于 2016-05-19T13:22:20.300 に答える
1

私は同じ問題を抱えているので、あなたの「解決策」を試しました。しかし、この cipherSuite-Code を使用すると、ほとんどの IE、Android および Safari が「handshake_failure」のためにブロックされます!

https://www.ssllabs.com/ssltest/analyze.htmlでテストします

どの cipherSuite エントリが HTTP2 をブロックしたか知っていますか (ALPN は利用できません)。

于 2016-05-25T11:12:54.967 に答える