当前位置: 首页 > 知识库问答 >
问题:

当握手中没有发送“客户端请求”时,Chrome如何知道提供客户端证书?

程志新
2023-03-14

这个问题让我感到困惑,而我的客户端应用程序和外部服务器之间的相互SSL故障。

当我的应用程序尝试连接到外部服务器的rest API时,我们调用它https://www.server.com/api/resolve-我希望与服务器hello一起发送“证书请求”握手元素。就我和服务器之间所有通信量的tcpdump所知,它没有被发送。只发送“服务器Hello,证书,证书状态,服务器密钥交换,服务器Hello Done”:

TLSv1的tcpdump。2握手:https://i.stack.imgur.com/50Ous.png

然而,当我试图在Chrome中访问相同的API URL时,浏览器会显示一个框,要求我选择客户端证书进行相互身份验证。当我捕捉到该握手的转储,直到浏览器提示我输入证书时,我仍然没有看到服务器发送的“证书请求”:

Tcpdump浏览器导航到API:https://i.stack.imgur.com/hvOEx.png

在Chrome中选择证书后,我被引导到网站,但是我也没有看到在我的TLS1.2捕获中发送的客户端“证书”。

我的问题是,Chrome有没有办法知道服务器请求的客户端证书,如果该请求没有在TLS握手中发送?

或者,wireshark可能在骗我吗?当我测试时,例如:https://client.badssl.com/它请求相互SSL,我在服务器密钥交换之后立即看到证书请求,这与我应该看到的完全一样。我在TLSv1中注意到。2 RFC(https://www.rfc-editor.org/rfc/rfc5246)报告指出:

"特别是,证书和证书请求握手消息可能大到需要碎片。"

但这应该与Wireshark显示TLS信息的方式无关。

共有1个答案

哈翔
2023-03-14

应用程序数据之后的数据包捕获中有几个加密的握手消息。这很可能意味着服务器本身在默认情况下不会请求客户端证书,而是只针对特定的URL请求证书。

在这种情况下,首先在没有证书请求的情况下进行TLS握手。握手完成后,客户端通过加密的连接发送HTTP请求,该连接是数据包捕获中的应用程序数据。服务器将确定请求的网址需要客户端证书,并启动重新协商,即另一次TLS握手,但这次是使用证书请求。但是由于连接已经加密,这种重新协商只能以加密握手消息的形式显示,如果不解密流量,就无法看到详细信息。

 类似资料:
  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 问题内容: 我正在尝试创建一个简单的脚本,以便每次文件更新时都将文件中的数据发送到客户端。我已经测试过,发现该文件已被读取,但是客户端什么也没收到。控制台中没有错误。我对socket.io相当陌生。 node.js代码 客户代码 问题答案: 每当事情无法正常进行时,您都需要诉诸“调试模式”。在这种模式下,您需要收集所有可能发生的事件,并从中学到什么。为此,请将以下代码添加到客户端: 这些消息都记录

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 我不知道我到底需要在哪里包含客户机证书。现在,我的第一个问题是我不信任服务器。我尝试使用默认的Java密钥库文件(cacerts),其中包含Thawte和Digicert,这些是我试图与之通信的服务器的根权限。我使用

  • 我是Netty的新手,我尝试编写一个使用相互身份验证的echo服务器和客户端。不幸的是,它无法工作,客户端没有发送其客户端证书,服务器按预期断开连接。下面是我到目前为止所做的工作和客户端代码的概述--它可能包含一些bug或者我错过了一些重要的东西。谢谢你经历了这一切! 这就是我所拥有的: Netty版本4.1.0.cr1 可在服务器上下载的有效密钥存储库、信任存储库和CRL 直接使用JSSE的ec

  • 当我尝试access/oauth/token时,我得到了错误: O.S.S.O.Provider.Endpoint.TokenEndpoint:处理错误:NoSuchClientException,没有请求ID:username的客户端 null