Jör*_*wig 5 ssl http tls apache-2.2
我已经用 PHP 编写了一个在 Apache 下运行的 IPP 服务器。使用标准的 IPP 客户端,它工作得很好。但是当我尝试从 iOS 设备打印时,当客户端尝试切换到 TLS 时,连接会中断。这似乎由 RFC 2817(在 HTTP/1.1 中升级到 TLS)涵盖,并且应该由 Apache 支持多年。我的 Apache 配置有什么问题?
Apache SSL 配置:
SSLEngine optional
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key
Run Code Online (Sandbox Code Playgroud)
要求:
OPTIONS * HTTP/1.1
Connection: Upgrade
Host: iserv.local
Upgrade: TLS/1.0,SSL/2.0,SSL/3.0
User-Agent: CUPS/1.5.0
Run Code Online (Sandbox Code Playgroud)
回复:
HTTP/1.1 200 OK
Server: Apache/2.2.16
Content-Length: 0
Content-Type: text/plain
Run Code Online (Sandbox Code Playgroud)
预期回复:
HTTP/1.1 101 Switching Protocol
Server: CUPS/1.4
Connection: Keep-Alive
Keep-Alive: timeout=30
Connection: Upgrade
Upgrade: TLS/1.0,HTTP/1.1
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)
据我所知,Apache Httpd从 2.1 版开始就支持RFC 2817 。
要使用它,您必须使用SSLEngine optional
(而不是更常见SSLEngine on
的HTTPS),如文档中所述。
编辑(我没有意识到你已经在使用SSLEngine optional
):
看来这个问题具体是由于OPTIONS * HTTP/1.1
. OPTIONS / HTTP/1.1
当您发送(或OPTIONS / HTTP/1.1
) 具有相同的升级标头时,它将起作用。
经过更多调查后,似乎OPTIONS *
在最新版本的 Apache Httpd 上根本不起作用(或者至少它的工作方式不同)。
如果您尝试 Debian Etch (Apache Httpd 2.2.3),一个简单的OPTIONS * HTTP/1.1
(带有标头)将为您提供带有和标头的Host
响应。Allow: GET,HEAD,POST,OPTIONS
Vary
在 Debian Lenny(Apache Httpd 2.2.9,带有一些额外的向后移植的安全补丁)和更新的版本上,您根本不会获得这些Allow
或Vary
标头。您将获得它们OPTIONS /
。
OPTIONS *
我怀疑这些版本之间的处理方式发生了变化。(这也可能与该线程中提到的问题有关。)这肯定会影响通过OPTIONS *
.
我建议向 Apache Httpd 用户或可能的开发人员列表询问有关此问题的信息。
听起来这可能是一个错误。(使用的情况OPTIONS *
相当罕见,而且很少有客户端支持 RFC 2817,以至于它可能根本没有被注意到。)
归档时间: |
|
查看次数: |
1024 次 |
最近记录: |