Apache2 – 在Chrome中加载SSL页面,但不加载Safari

我在Safari上遇到了这个不寻常的SSL问题。 基本上我有一个Debian服务器运行Apache 2(2.4.10)与OpenSSL 1.0.1t在私人networking上。

我以正常的方式build立了一个SSL虚拟主机,并使用一个中间服务器签名的Web服务器证书,该证书又由使用Appleconfiguration文件的所有机器上安装的私有根证书进行签名,并且已经validation根安装在钥匙串上。

在Chrome中 – 这个设置工作正常。 页面加载和SSL证书链是好的,Chrome报告没有错误和绿色的挂锁。

在Safari(10)中 – 但也发生在v9上 – 而在iOS 10上 – 我得到的只是“Safari无法打开页面xxx,因为Safari无法build立到服务器xxx的安全连接”。

奇怪的是,如果我重新启动Apache服务器它在Safari中工作了几秒钟 – 足以让一个页面加载 – 再次失败之前。

在桌面上cURL – 未知的SSL协议错误。

openssl(s_client -connect)中 – 与Protocol:TLSv1,Cipher:EDH-RSA-DES-CBC3-SHA连接。

在nscurl -ats-diagnostics-每次尝试失败。


我认为这一定是Apacheconfiguration的一个问题,所以我尽我所能地去除了我认为可能导致的问题,现在在我的ssl.conf中,我已经将SSLProtocol设置为ALL -SSLv3,SSLCipherSuite设置为MEDIUM: !aNull和vhost的.conf文件中,我已经启动了SSLEngine,其中唯一的其他SSLconfiguration是证书文件,中间和密钥。


但该网站仍顽固地拒绝在Safari中打开。 是什么让奇怪的是,Chrome的工作正常! 我尝试去Safari浏览器的任何公共SSL网站工作正常。

任何build议感激!

看你的踪迹,我想我明白了。 好像在端口443上对IPv6进行回复的Apache虚拟主机configuration为“说”HTTP,而不是HTTPS。

我validation了这一点,试图连接到: https : //google.com : 80/ (或任何其他网站),而嗅探,我得到的答复正是400像你的情况。

因此,请检查您的Apache VirtualHostconfiguration,或者只是在您的服务器上禁用IPv6,如果您不打算使用它。

任何时候,我告诉一个软件,比如你告诉Apache,一个密码套件string像MEDIUM:!aNULL它对我来说最好是先用openssl ciphers命令testing它。 这样你可以发现很多好奇的行为。

 openssl ciphers -v 'MEDIUM:!aNULL' DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1 DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1 SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1 IDEA-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=IDEA(128) Mac=SHA1 IDEA-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=IDEA(128) Mac=MD5 RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5 KRB5-IDEA-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=IDEA(128) Mac=SHA1 KRB5-IDEA-CBC-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=IDEA(128) Mac=MD5 ECDHE-RSA-RC4-SHA SSLv3 Kx=ECDH Au=RSA Enc=RC4(128) Mac=SHA1 ECDHE-ECDSA-RC4-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=RC4(128) Mac=SHA1 ECDH-RSA-RC4-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=RC4(128) Mac=SHA1 ECDH-ECDSA-RC4-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 PSK-RC4-SHA SSLv3 Kx=PSK Au=PSK Enc=RC4(128) Mac=SHA1 KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1 KRB5-RC4-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=MD5 

你可以从这个清单中推断出,MEDIUM意味着你想排除高和低密码。 现在,MEDIUM才是古老的。 您可以合理地期望任何取决于RC4或MD5的密码套件被客户端禁用为不安全。 对IDEA或SEED的支持可能不是很普遍的客户,因为这些从来都不是主要的密码。 对SHA(旧SHA1)的支持将在不久的将来消失。

openssl ciphers忽略第二列( SSLv3并不意味着你实际上使用SSLv3,这只是一个最低要求的SSL级别)。

我build议使用HIGH:-RC4:-MD5:-PSK:-aNULL:-eNULL或者如果你想超级新/超级安全,使用HIGH:-SHA:-RC4:-MD5:-PSK:-aNULL:-eNULL

如果你想使用超复杂的显式密码列表(比如Mozilla的build议列表),请注意,当你迁移到更新版本的openssl时,你需要不时用新的密码手动更新列表。

如果您希望明确优先考虑Apache上的某些密码,则可能需要SSLHonorCipherOrder off否则客户端的sorting将是权威性的。

使用MEDIUM对于现代浏览器来说可能是个问题,因为它们将禁止许多旧的密码。

您可以查看Mozilla对密码的build议 ,例如,您可以使用其“中间兼容性(默认)”设置:(这是非常长的,只是复制和粘贴)

 ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE- -AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA :ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE -RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3 -SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:DSS

感谢回复。 我最终通过嗅探Safari和Apache,然后是Chrome和Apache之间的联系来想出它。 正如我所说,服务器位于专用networking上,而且我正在使用Avahi(zeroconf)来提供名称parsing,所以我可以使用类似web-server.local的东西,并自动将其parsing为正确的IP地址。 Safari试图使用ipv6连接,Chrome试图使用ipv4。

当我尝试使用Safari进行连接时,Wireshark给了我一些非常不寻常的结果 – 这是一个截图。 看来SSL连接开始build立,然后服务器立即发送一个400错误。

Wireshark与Safari的输出

我试图直接在Safari中使用IPv4地址 – 除了显而易见的证书不匹配错误之外,它的工作原理。

所以我在Avahi(zeroconf守护程序)和服务器上的Apache中禁用了IPv6。 重新启动,现在它工作。

任何洞悉,为什么它可能会像这样的行为将不胜感激!