Jor*_*rmn 4 apache ssl http2 alpn
在我的网络服务器上,我试图让H2(http2)工作.通过"ondrej"存储库安装Apache 2.4.20.我在Debian 8和Ubuntu 14.04服务器上测试过,但是我一直遇到同样的问题.我有OpenSSL 1.0.2和SSL vhosts运行.
奇怪的是发送升级头(连接:升级和升级:h2).当我做一些外部服务器测试时,我得到了响应,即在ALPN支持下h2正常运行.但问题是我测试的浏览器(Win7上的Chrome和FireFox)不会升级到H2.
我注意到缺少的一件事是HTTP2-Settings标头,但我在任何Apache文档中都找不到任何实现此功能或强制Apache发送此标头的内容.
遗憾的是我无法使用cUrl进行测试,因为我可以访问的服务器不支持任何具有http2支持的版本.
我的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
Run Code Online (Sandbox Code Playgroud)
我正在使用prefork模块运行Apache而不是使用worker.
谁能告诉我什么是错的?
最后我开始工作了.这是将"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.
您无法升级到该h2协议。
HTTP/1.1的升级机制是由客户端发起的。
如果我理解正确,并且您尝试将Upgrade和HTTP2-Settings标头从服务器发送到客户端,那么这是没有意义的。客户端发送这些标头,而不是服务器。
h2c此外,虽然 HTTP/2 协议本身允许通过 HTTP/1.1 升级到(注意协议名称末尾的 )进行明文通信c,但浏览器供应商尚未实现此机制,仅在升级后才使用 HTTP/2 协议。 ALPN 协商。
总之:
h2c),但仅限于非浏览器客户端,例如nghttp。这里对此进行解释。Upgrade和HTTP2-Settings标头,而不是服务器。h2。这意味着浏览器和服务器之间无法使用明文 HTTP/2。