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

Ans*_*hul 6 security 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 */
Run Code Online (Sandbox Code Playgroud)

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

任何帮助/指针都会非常值得注意.

Maa*_*wes 2

一般来说,TLS 倾向于临时密钥交换、DHE 或 ECDHE。通过临时密钥交换,会话密钥(预主密钥和主密钥)是使用临时 Diffie Hellman 密钥的密钥协议计算的,而不是使用作为证书一部分的 RSA 或 ECDSA 密钥对。很多时候你无法做到这一点。

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

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


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