可以强制 Firefox 使用 ssl 而不是 tls

Can Firefox be forced to use ssl instead of tls

我想强制 firefox 56 使用 ssl 而不是 tls1.2,尽管 SSL 3.0 is considered unsafe。 我的意图是产生一个像 ...no overlap ... 这样的错误。并截取此错误的屏幕截图。

about:config

中的首选项

根据我的理解firefox docs for security.tls.version*我设置了

security.tls.version* 的文档还指出:

These preferences replace the deprecated security.enable_ssl3 and security.enable_tls boolean settings. Upon upgrade, the old preferences are not automatically migrated.

所以我检查了弃用的首选项是否与我上面的设置冲突。但是我的 Firefox 56 安装没有以 security.enable_ 开头的首选项。所以看来我不必担心任何已弃用的设置。

其他原因可能是

证书是原因吗

该网站使用具有以下特征的证书:

The connection to this site uses a strong protocol (TLS 1.2), an obsolete key exchange (RSA), and an obsolete cipher (AES_256_CBC with HMAC-SHA1).

阅读 this reply 后,我假设使用的密码不是 TLSV1 的一部分,但 运行 下面的命令似乎证明使用的密码是支持 SSL3 的密码。

openssl ciphers -v 'TLSv1' | grep "AES" | grep "256" | grep "CBC" | sort
// output
PSK-AES256-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(256)  Mac=SHA1
SRP-AES-256-CBC-SHA     SSLv3 Kx=SRP      Au=SRP  Enc=AES(256)  Mac=SHA1
SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(256)  Mac=SHA1
SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=AES(256)  Mac=SHA1

更新

HSTS - Strict-Transport-Security HTTP 响应 header 字段

这个问题 Is firefox disabling of insecure TLS fallback part of the HSTS spec 可能是相关的。

HTTP Strict Transport Security chapter 5.1 (HSTS - rfc 6797) 包含

An HTTP host declares itself an HSTS Host by issuing to UAs an HSTS
Policy, which is represented by and conveyed via the
Strict-Transport-Security HTTP response header field over secure
transport

有问题的站点有这些 header 字段等等

p3p: CP="NON CUR OTPi OUR NOR UNI"
vary: Accept-Encoding
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
cache-control: max-age=315360000, public
expires: Sat, 03 Jul 2027 00:48:12 GMT
x-xss-protection: 1; mode=block
strict-transport-security: max-age=31536000; includeSubDomains

问题 (tl;dr)

  1. firefox 50以上版本好像不能强制使用ssl3。是这样吗?不然怎么实现?

  2. 据我了解,certificate signing request (CSR) 是获得证书的第一步。 CSR 是否已包含以后 https-connection 中必须使用的密码和协议?

另见

问题 1 的答案:强制 firefox 使用弱加密

我无法强制当前的 firefox (v 54) 使用弱加密。作为 this reddit thread suggested i downloaded Firefox 30.0 portable from sourceforge 并且在设置 security.tls.version.max = 1 之后能够强制出现所需的错误 Firefox Secure connection failed: ssl_error_no_cypher_overlap

这是我想要的截图:

问题 2:CSR 是否已经包含必须使用的密码和协议?

这个我还不清楚。

好的,我明白了,所以你想在 Firefox 中启用 SSL 的原因是截屏,所以如果你关闭它,你将看到错误消息的类型并能够向用户解释问题?我建议这不是对您时间的建设性利用。

Firefox 已禁用 SSLv3 by default in Firefox 34 - 在撰写本文时,它已经有 20 多个版本了(虽然承认只有 3 年前)。因此,即使您可以在当前版本中以某种方式 re-enable 它,错误消息也可能与该版本中的内容完全不同。

因此,如果您真的想这样做,那么您最好检查支持该浏览器的版本,而不是试图破解当前版本。如果您无法使用旧浏览器,那么像 BrowserStack 这样的网站可以提供帮助。但即便如此,它也可能会根据用户使用的版本而改变。

此外,Firefox 从一开始就支持 TLSv1.0,因此您真的不需要担心关闭 SSLv3,至少对于您的 Firefox 用户而言。也许您需要担心关闭 TLSv1.0 作为 TLSv1.2 was only enabled in version 27 (released in February 2014),我们稍后会谈到这一点,但我真的不会担心为您的 Firefox 用户禁用 SSLv3。

事实上,今天使用的所有浏览器都支持 TLSv1.0 (handy chart here),任何不支持 TLSv1.0 的浏览器在大多数网站上都可能会遇到更大的问题,除非它们真的只是纯文本网站,或者您是渐进式增强真的非常好。

因此请为他们的站点关闭 SSLv3 - it's insecure and should not be used. The alternative is to risk 100% of your users for the vast minority who are using ancient browsers. Yes browsers should use the highest version of TLS rather than SSL if they support it but various downgrade attacks can inadvertently cause this not to be the case. The safest option is to just disable it. I'm not normally one to go in for absolutes, and would normally suggest you measure your usage but for the vast majority of sites disabling SSLv3 is something they should do. Even Google has disabled SSLv3,如果他们可以这样做,那么您可以确定这样做是安全的。

如果您收到投诉,那么错误消息可能会说一些类似于 "Secure Connection Failed" 协议错误的内容。 https://badssl.com/ 是一个非常方便的网站,用于测试错误的 SSL/TLS 配置,但不幸的是它没有 SSLv3 的示例。

接下来将关闭 TLSv1.0,这将变得不那么容易,因为浏览器需要更长的时间来实现更高版本(尤其是 Internet Explorer,直到版本 11 才可靠地获得 TLSv1.2)。 TLSv1.0 还没有被破坏,但它即将被淘汰,像 PCI-DSS 这样的标准要求尽快关闭它(尽管 they've pushed back on the date for this at least once). If you want to test this in firefox this is easy by setting security.tls.version.max = 1 and visiting a TLSv1.1 or TLSv1.2 only site like https://tfl.gov.uk/ 你会看到以下消息(这可能类似于你的SSLv3 访问者会看到而不是您在答案中显示的密码错误):

An error occurred during a connection to tfl.gov.uk. Peer reports incompatible or unsupported protocol version. Error code: SSL_ERROR_PROTOCOL_VERSION_ALERT

我还建议您将日志记录添加到您的网络服务器日志中以跟踪所使用的 TLS 版本,以便您可以在未来决定何时关闭协议或密码。这对于 Nginx and Apache 来说相当容易,但是如果使用其他网络服务器,或者如果您的网络服务器前面有一个负载平衡器来处理您的 TLS,则需要查看它们是否允许这样做。

最后回答你的第二个问题,不,CSR 没有定义协议或使用的密码。这是由服务器和客户端都支持的组合决定的。理想情况下,服务器应优先于弱协议和密码实施更安全的协议和密码。

协议(SSLv3、TLSv1.0...等)是如何建立 HTTPS 连接以及如何确定密码的。密码是用于实际加密连接的密码。由于此类密码不限于它们最初引入的协议,并且无论您使用的是 SSLv3、TLSv1.0、TLSv1.1 还是 TLSv1.2,例如 PSK-AES256-CBC-SHA 都可用。 TLSv1.3(即将发布)是第一个尝试主动删除旧密码而不是继续扩展列表的版本。

一段时间以来,Chrome 对较旧的密码套件发出了温和的警告(基本上是那些在密码套件名称中未使用 GCM 的密码套件,尽管有一些不太常见的密码套件也被认为是安全的),其中这就是您看到 "The connection to this site uses... an obsolete key exchange (RSA), and an obsolete cipher (AES_256_CBC with HMAC-SHA1)." 消息的原因。 SSLLabs Server Test tool is the best tool for checking your server set up and I would suggest comparing it to other sites to get an A grade which should stand you in good stead for some time (I suggest rescanning quarterly to keep up with any changes in the security world - for example like SSLv3 being found to be insecure). Mozilla also have a very handy SSL/TLS config generator 适用于最常见的浏览器。

HSTS(或 HTTP Strict Transport Security)确实对这个对话没有限制。它只是声明客户端必须对站点使用 HTTPS,不应使用纯 HTTP。当然,这取决于能否建立安全的 HTTPS 连接。如果您的某些站点或域尚未移植到 HTTPS,则打开此选项可能是一个危险的选项。