web-dev-qa-db-ja.com

Chromeブラウザがnginx http2サーバーを認識しないのはなぜですか?

デジタルオーシャンペーパー に従ってNginx confをセットアップし、http2が利用可能になりました...

しかし、Chrome(バージョン54.0.2840.98(64ビット))開発ツールでは、常にHTTP 1/1上にあります:

NAME             METHOD  STATUS  PROTOCOL
Shell.js?v=xx..    GET    200     http/1.1

私のサーバーはALPNとNPNの両方をサポートするUbuntu 16.04 LTSを実行しており、それに付属するopensslバージョンは1.0.2gです。

this tool site を使用してhttp2サポートを確認しました。結果は次のとおりです。

Yeah! example.com supports HTTP/2.0. ALPN supported...

カールチェックもOK

 $ curl -I --http2 https://www.example.com
  HTTP/2 200 
  server: nginx/1.10.0 (Ubuntu)
  date: Tue, 13 Dec 2016 15:59:13 GMT
  content-type: text/html; charset=utf-8
  content-length: 5603
  x-powered-by: Express
  cache-control: public, max-age=0
  etag: W/"15e3-EUyjnNnyevoQO+tRlVVZxg"
  vary: Accept-Encoding
  strict-transport-security: max-age=63072000; includeSubdomains
  x-frame-options: DENY
  x-content-type-options: nosniff

コンソールからis-http2 cliでも確認しました

is-http2 www.Amazon.com
× HTTP/2 not supported by www.Amazon.com
Supported protocols: http/1.1

is-http2 www.example.com
✓ HTTP/2  supported by www.example.com
Supported protocols: h2 http/1.1

私のローカルホストのopensslでテスト済み

$ echo | openssl s_client -alpn h2 -connect www.example.com:443 | grep ALPN
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
 verify return:1
 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
 verify return:1
 depth=0 CN = example.com
 verify return:1
 ALPN protocol: h2
 DONE

なぜChromeが残されていますか?Safari(v 10.0.1)でも確認できますか?

4
erwin

StackOverflow に関する私の回答に従って:

おそらく次の2つの理由のいずれかになります。

  1. ウイルス対策ソフトウェアを使用していて、トラフィックがMITMであるため、HTTP/1.1にダウングレードしています。 AVのhttpsトラフィック監視をオフにして、サーバーに直接接続します。

  2. 古いTLS暗号を使用しており、具体的にはChrome HTTP/2では許可されていません( https://http2.github.io/http2-spec/#BadCipherSuites )。上記のガイドのステップ5に従います https://www.ssllabs.com/ssltest/ を使用してサイトをスキャンし、TLS構成を確認して改善します。

3番目の理由は SSL/TLSライブラリでのALPNサポートの欠如 (つまり、openssl 1.0.1を使用していて、1.0.2以降である必要があるなど)ですが、すでに確認済みですALPNをサポートしているため、この回答では省略します。

16
Barry Pollard