我想解码和存储原始SSL / TLS数据以便在将来证明某些内容,我认为如果我通过一个例子来描述它会更好:
1)有一个可通过SSL访问的远程REST端点,并提供一些有用的数据。该端点由某些第三方控制,我无法控制它。
2)我向此端点发出GET请求,并将响应的原始SSL流量存储在一个文件中,然后将解码的ssl流量存储在另一个文件中
3)另外,我将此端点的SSL证书保存在一个单独的文件中(我猜这个操作只需要完成一次)
如果我正确理解当我拥有上述步骤和将来的所有数据时,当另一个第三方要求我提供证据证明过去某个时刻远程服务器上有某些数据我可以:< / p>
1)向我们出示我保存的证书(步骤3)。由于这个证书是由一个众所周知的权威机构签署的,因此我几乎没有机会伪造它
2)使用RAW SSL数据呈现它们以及使用上述证书对其进行解码的方法
3)在解码的REST响应头中,还应该存在远程服务器时间。
因此,如果我没有弄错的话,我几乎可以毫无疑问地证明,在过去的某个时刻,即使远程服务器本身不再运行,远程方服务器上的某些数据也是如此
因此我可以使用原始SSL数据来证明过去远程服务器上存在某些东西。并且很有可能有人质疑这种说法,因为伪造响应数据或标题意味着我能够打破SSL加密。
有没有办法自动化这种情况?我的意思是有没有办法以一种允许以后轻松解码的形式记录原始SSL数据?
我尝试过使用firefox / chrome浏览器和sslkeylog文件并使用wireshark嗅探流量 - 它实际上有效,但有没有办法使用某种REST库自动化它,因为每次使用firefox并记录SSL密钥可能很麻烦 - 可能需要每小时存储数千个这样的请求并且手动完成它将是一个全职工作,此外我不确定是否有办法证明存储在ssskeylog文件中的这些密钥实际上与远程服务器的证书......
答案 0 :(得分:1)
不,您无法证明服务器发送的数据。例如,使用TLS_RSA_WITH_AES_256_CBC_SHA256作为密码套件,您可以在整个TLS会话中伪造来自双方的所有数据,甚至无需联系服务器。而服务器端也可以产生这样的伪造。正如EJP所指出的,唯一可以伪造的是签名的数据。对于RSA密码套件,唯一签名的是证书,但它们不会更改,也不会以加密方式绑定到TLS会话。
其他密码套件可能涉及一些签名的握手数据,但TLS并非旨在提供不可否认性,因此我怀疑它是偶然的。