2016-05-19 7 views
1

私のWebサーバーでは、H2(http2)を動作させようとしています。 "ondrej"リポジトリ経由でApache 2.4.20をインストールしました。私はDebian 8とUbuntu 14.04のサーバでテストしましたが、私は同じ問題を抱えています。 OpenSSL 1.0.2とSSL仮想ホストが動作しています。ブラウザはH2にアップグレードされません。「アップグレード」ヘッダーが送信されます

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

私が気付いたのは、HTTP2-Settingsヘッダーですが、これを実装したりApacheにこのヘッダーを送信させたりするためにApacheのドキュメントでは何も見つかりません。

悲しいことに私はcUrlでテストできませんでした。なぜなら、私がアクセスしたサーバーはhttp2をサポートしているバージョンをサポートしていないからです。

マイSSLのバーチャルホストの設定:

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を実行していますよ。

何が間違っているのですか?

+0

mod_http2をインストールした後も同じ症状でした。私の場合は、php-fpm(https://techwombat.com/enable-http2-apache-ubuntu-16-04/で説明したように)を使用して、私のために最後に解決しました。他人がこのように来る場合に備えて、ただそれを投げてください! –

答えて

0

からh2にアップグレードすることはできません。

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

あなたが正しく理解していて、サーバーからクライアントへのUpgradeHTTP2-Settingsのヘッダーを送信しようとしている場合は、意味がありません。クライアントはサーバーではなく、これらのヘッダーを送信します。また、HTTP/1.1プロトコルを使用してクリアテキスト通信を可能にする一方で、h2c(プロトコル名の最後にcがあることに注意してください)、ブラウザベンダーはこのメカニズムを実装せず、 ALPNネゴシエーション後のHTTP/2プロトコル要約すると

  • あなただけなnghttpなど、ブラウザ以外のクライアントと、HTTP/2クリアテキスト(h2c)にHTTP/1.1からアップグレードすることができます。これはhereと説明されています。
  • アップグレードメカニズムはクライアントによってのみ開始され、サーバーではなくUpgradeHTTP2-Settingsというヘッダーを送信します。
  • ブラウザは、ALPN(h2)経由のHTTP/2のネゴシエーションのみをサポートしています。つまり、ブラウザとサーバーの間にクリアテキストHTTP/2を設定することはできません。
+0

Thxしかし、私はh2cを一度も言及していません。私はそれを動作させるつもりはありません。それ以外に、あなたはヘッダーについての部分を誤解していました。 –

4

最終的にはうまくいきました。

いるSSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:それは、この文字列に "SSLChiperSuite" を変えるの問題だったECDHE-RSA-AES256-GCM-SHA384:ECDHE -ECDSA-AES256-GCM-SHA384:DHE-RSA-A $

古いものは、http2をブロックするオプションを持っていました。私のSSLテスト評価はまだA + btwです。

+0

あなた自身の解決策を見つけ出すのにうってつけです。ここにあなた自身の答えを入れてくれてありがとう - それは私を助けました。 – Michael

0

私は同じ問題を抱えていますので、私はあなたの "解決策"を試しました。 しかし、この暗号コードでは、すべてのIEのうち、アンドロイドとサファリは "handshake_failure"のためにブロックされます!

それはあなたがHTTP2(ALPNが利用できない)をブロックしなかったのCipherSuite-エントリのどの知っていますhttps://www.ssllabs.com/ssltest/analyze.html

にtestet?

+1

私は、Cipher全体をCertbotのものと置き換えました。 この1作品: EECDH + AESGCM:EDH + AESGCM:AES256 + EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256 + EDH:ECDHE-RSA-AES256-GCM- SHA3​​84:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE- AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256- GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5 :! PSK:!RC4 –

関連する問題