我想将我的 AWS ELB 升级到仅允许 TLS v1.2 的安全策略。
在执行此操作之前,我想检查 ELB 日志以确保没有当前客户正在使用旧版本。
我的 ELB 日志有一个字段“ssl_protocol”。大多数请求记录“TLSv1.2”,但少数请求指定“TLSv1”。(还有几个 v1.0 和 v1.1,但这些都收到了 4XX 响应,因此可能是非合法流量)。
但我不太清楚这个“TLSv1”是什么意思。来自这个问题听起来,指定了 TLSv1 协议的请求表示可以通过以下方式加密任何TLSv1 次要版本,因此如果我不允许版本 1.0 和 1.1,这些请求仍可以使用 1.2 成功加密。
它是否正确?
答案1
首先,我没有看到有关 ELB 日志中 ssl_version 字段内容的任何具体信息,而这应该是权威地回答 ELB 日志含义的正确地方。
尽管如此,在这种情况下,该字符串TLSv1
应该被合理地解释为TLS 版本 1.0。
在您的特定情况下,这意味着这些客户端似乎不支持更高版本(因为他们应该尽可能地优先选择和使用这些版本)。
值得注意的是,像 、 、 、 这样的字符串SSLv2
,尤其是SSLv3
像这样写的时候(有时会在主题上有所变化,具体取决于所涉及的软件)通常不是根据当前的确切上下文编写的自由格式的文本,而是底层软件中使用的协议标识符。TLSv1
TLSv1.1
TLSv1.2
TLSv1.3
至于TLSv1
广泛用于 TLS 1.0 版的潜在混淆标识符,我认为我们可以从中得出的结论是,流行的实现(如 openssl)在某种程度上被版本控制策略的变化所困扰,这种变化只有在 TLS 1.1 和后续版本推出后才变得清晰。
例如,SSL 的版本号为 1.0、2.0、3.0,但自从协议更名为 TLS 以来,版本号就改为 1.0、1.1、1.2、1.3。我猜,在首次推出 TLS 1.0 时,人们只是假设下一个版本将是 2.0,而继续使用与以前相同的简化标识符模式仍然有意义。
旁注:
正确的是,curl
具有命令行选项,巧妙地使用了--tlsv1
不同于的含义--tlsv1.0
,但问题不在于如何指示curl
如何允许连接,而是解析日志条目指定为某个连接使用的确切版本。
答案2
您可以自行选择是否允许用户回退到较低版本(当然,较低版本存在漏洞,如 poodle)或拒绝密码或 tls 版本不匹配。您必须从此处与最终用户/客户端沟通,您必须使用上述版本,否则连接将被拒绝。
因此,现在如果客户端明确表示我想使用较低版本的 TLS,但服务器阻止使用旧版本,则客户端根本不会升级版本。在这种情况下,请求将被拒绝。