使用静态证书解密 openssl 数据包



我正在从事一个道德黑客项目,通过OpenSSL监控所有加密数据包。 我确实有公钥和私钥(证书文件)。我的常规数据包解密应用程序代码片段如下:

SSL_library_init();
ctx = InitCTX();
server = OpenConnection(hostname, atoi(portnum));
ssl = SSL_new(ctx);      /* create new SSL connection state */
SSL_set_fd(ssl, server);    /* attach the socket descriptor */
ShowCerts(ssl);        /* get any certs */
SSL_write(ssl,acClientRequest, strlen(acClientRequest));   /* encrypt & send message */
bytes = SSL_read(ssl, buf, sizeof(buf)); /* get reply & decrypt */
SSL_free(ssl);        /* release connection state */

SSL_read基本上在握手时获取证书,并利用它来解密数据。有没有办法离线提供相同的证书来解密数据。

任何帮助/指示都将非常明显。

通常,TLS倾向于短暂的密钥交换,DHE或ECDHE。使用临时密钥交换时,会话密钥(预主密钥和主密钥)是使用具有临时 Diffie Hellman 密钥的密钥协议而不是作为证书一部分的 RSA 或 ECDSA 密钥对计算的。所以很多时候你不能这样做。

但是,您可以显式选择一个较旧的RSA_密码套件。在这种情况下,预主密钥在客户端使用服务器的公钥进行加密。然后,服务器的私钥可以解密此预主密钥,使用 PRF(基于 HMAC 的密钥派生)计算会话密钥,然后验证/解密所有数据包。

应该可以使用Wireshark来做到这一点,是的。


请注意,TLS 1.3 将不再支持 RSA_ 密码套件。您必须捕获客户端的公钥和服务器的私钥、服务器的公钥和客户端的私钥,或者直接捕获会话密钥才能解密流量。实际上,这是TLS 1.3的常见抱怨之一;之后无法解密流量。然而,这是设计使然;国家安全局也不能这样做。

最新更新