使用 Tcpdump 检索客户端证书会导致证书长度为零

信息安全 tls 证书 代理人 tcp
2021-09-09 22:26:23

我正在尝试代理一个移动应用程序(使用Fiddler),它将客户端证书发送到它连接到的服务器。我认为使用Tcpdump捕获流量、检索客户端证书并将其与 fiddler 一起使用就足以绕过这一点。

但是,当我在没有代理的情况下使用 Tcpdump 捕获数据包时,我注意到服务器发送了一些证书,要求提供客户端证书,并且客户端发送了一个空证书(证书的长度为0)。整个 SSL 流程结束后,应用数据正常发送,应用正常运行。0接受证书长度的事实使我认为任何证书都会被接受,但事实并非如此。

我确实向 Fiddler 传递了一个假证书,并且我再次看到了一个类似的条目(证书长度0),这让我觉得我在客户端如何发送证书方面遗漏了一些东西。

在 SSL 过程之后,我收到一个服务器加密警报,并且该应用程序根本无法运行。所以,我想知道,为什么0即使我发送了证书,我也会得到证书的长度?即使是假的,我不应该在 Tcpdump 中看到它吗?

1个回答

TLS中,在出示自己的证书后,服务器可能会要求客户端证书(CertificateRequest消息)。该请求包含服务器将用于验证证书的 CA 名称列表。然后,客户端必须以Certificate包含匹配证书的消息进行响应:客户端将扫描其拥有的证书,以查找由名称为服务器指定名称之一的 CA 直接或间接颁发的证书。

如果客户端没有匹配的证书,那么它必须发送一个Certificate带有空列表的消息(这是您观察到的)(在 SSL 3.0 中,在那种情况下,客户端Certificate完全忽略了该消息,但由于 TLS 1.0 是一个空Certificate列表强制)。

当客户端不提供证书时,由服务器决定下一步做什么。服务器仍然可以接受连接。在 IIS 配置中,这就是“请求证书”和“需要证书”之间的区别。在可能的行为中,服务器可能会在 SSL 级别接受连接,然后回退到隧道内的应用程序级别身份验证协议(从外部看,该协议将显示为“加密的应用程序数据”)。


因此,要么您在客户端没有匹配的证书,要么客户端没有注意到他的证书是匹配的,例如缺少中间 CA(在这种情况下是根 -> 中间CA -> 终端实体,并且服务器发送根的名称,但客户端只知道“end-entity”)。