2016-05-19 52 views
1

在我的網絡服務器上,我試圖讓H2(http2)工作。通過「ondrej」存儲庫安裝Apache 2.4.20。我在Debian 8和Ubuntu 14.04服務器上測試過,但我仍然遇到同樣的問題。我運行了OpenSSL 1.0.2和SSL虛擬主機。瀏覽器不會升級到H2雖然「升級」標題發送

奇怪的是升級頭(連接:升級和升級: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/2協議本身允許通過HTTP/1.1升級到h2c(注意在協議名稱末尾的c)進行明文通信,但瀏覽器供應商尚未實現此機制,只能使用ALPN協商後的HTTP/2協議。

總結:

  • 您可以從HTTP/1.1升級到HTTP/2明文(h2c),但只有非瀏覽器客戶端,如nghttp。這是解釋here
  • 升級機制僅由客戶端啓動,他們將發送UpgradeHTTP2-Settings標題,而不是服務器。
  • 瀏覽器僅支持通過ALPN協商HTTP/2(h2)。這意味着在瀏覽器和服務器之間不能有明文HTTP/2。
+0

Thx,但我從來沒有提到過h2c,我並沒有試圖讓它工作。除此之外,你誤解了有關標題的部分,從來不知道。 –

4

最後我得到了它的工作。將「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 + btw。

+0

搞清楚你自己的解決方案做得很好。感謝您將自己的答案放在這裏 - 它幫助了我。 – Michael

0

我有同樣的問題,所以我嘗試了你的「解決方案」。 但是,由於「handshake_failure」,使用此密碼套件代碼最重要的是,Android和Safari將被阻止!

它testet上https://www.ssllabs.com/ssltest/analyze.html

你知道其中的密文條目的那樣阻止HTTP2(ALPN不可用)?

+1

我剛剛用Certbot中的這一個替換了整個Cipher。 這一個工程: 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-RSA- 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:A零位:ENULL:EXPORT:DES:!MD5:! PSK:RC4 –