是否可以针对服务器的公钥验证已保存的SSL会话

时间:2017-12-04 05:44:12

标签: ssl tls1.2

以下是我要做的事情:

  • 我正在开发一个应用程序,人们可以跟踪产品的价格。
  • 我希望他们的手机可以抓取一些产品出现的网站(征得他们的同意),一天两次。
  • 我不想冗余地执行此操作,如果两个用户正在观看该产品,我只想使用其中一个进行抓取。
  • 完成对产品的抓取后,抓取结果将被推送到服务器(以防止冗余抓取)。
  • 在最后一步中,数据是从"不受信任的"资源。有人可以对网络流量进行逆向工程,并可能将垃圾推送到终点。我想要抓取的" HTML"是真实的,并且来自商业网站。

以下是问题: - 我当时认为可以通过为特定请求存储加密的SSL流量来实现,而在服务器端,我可以根据商家证书的公钥验证它(让我们说,newegg)。

然而,我不完全确定这是否会起作用,而且我仍然坚持编码。我们将非常感谢代码片段(只要它不是直接用于openssl命令:))

1 个答案:

答案 0 :(得分:1)

理论上,可以验证针对服务器证书(即证书内的公钥)捕获的TLS握手,以确保此握手是与服务器一起创建的。但是,仅凭这一点并不能证明解密数据和TLS握手属于同一个TLS会话。为此,您还需要连接的(预)主密钥。

请注意,修改机器人将从内部SSL状态和加密流量中提取(预)主机密,将此机密和加密流量与普通流量一起存储并编写一些代码以验证所有这些属于一起并不是一项微不足道的任务。根据所使用的SSL库,可能需要深入挖掘内部结构并使用未记录的(非API)函数来执行此操作或直接从某些内部结构中获取信息。

  

代码片段将不胜感激(只要它不是直接用于openssl命令:))

最新版本的OpenSSL具有SSL_SESSION_get_master_key功能。但我不知道OpenSSL中的任何API可用于验证和解密嗅探会话。您可以查看Wireshark的源代码。

如果您可以信任机器人本身,那么只需让机器人签署解密流量就可以更加简单,这样您就可以检测到虚假数据。