当 SSL/TLS 客户端收到具有空 DN 列表的证书请求消息时,它的正确行为是什么?
这里有两种看起来很自然的可能性: 1) 发回空证书消息 2) 从所有可能的证书中选择(或提示用户选择)一个证书
是否有一个正确的行为,或者任一选项都可以?我的目标是在我的代码(.Net、WCF)中向服务器提供证书,并且我正在尝试确定是否需要在客户端进行更改以覆盖不发送证书的看似默认的行为,或者如果我需要在服务器端进行更改才能实际发送 DN 列表。
浏览器似乎会选择选项 2,但我使用 WCF 和 .Net 的代码正在使用选项 1。我可以从存储中选择证书,但它不会在 TLS 握手中发送。
TLS 1.0 和 1.2 规范(RFC 2246 和 5246)似乎没有针对这种情况提供任何指导。
我想在Windows中打开浏览器,转到HTTPS站点,并在使用Wireshark捕获数据包时执行一系列操作.然后我想使用加密数据包捕获来查看解密的HTTP流量.如果您放弃浏览器,访问服务器或添加MITM,我知道有很多方法可以执行此操作(如下所列),但当您仅限于上述方案时,这些方法都不起作用.以下是我的典型方法:
服务器:对于拥有服务器私钥的站点,请使用Wireshark的内置SSL解密.
MITM:SSL代理(例如,Burp套件)将允许查看解密的流量,但这需要使用与服务器使用的证书和密钥对不同的证书和密钥对.
浏览器:openssl的s_client可以连接,发出请求和导出主密钥,但是这不显示关联的网页或运行javascript来计算后续请求参数.
有没有办法从"普通"浏览器导出主密钥,以便我可以使用它来解密浏览器会话的数据包捕获?
例如,当浏览器关闭时,SSL/TLS状态是否存储在磁盘上?如果是这样,我将如何访问它?在浏览器运行时是否可以在内存中访问(如果是这样,我将如何找到它)?
或者,操作系统(Windows)存储的所有SSL状态数据是否都不能直接访问?
或者,有没有办法强制浏览器为特定的HTTPS连接使用特定的主密钥(以及任何其他相关的SSL状态数据,如会话ID等)?如果是这样,我可以使用s_client设置SSL会话,然后将密钥数据传输到浏览器并在同一会话中打开新连接.这将通过不同的方式实现相同的目标.