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

时间:2018-01-16 14:21:58

标签: 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 */

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

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

1 个答案:

答案 0 :(得分:2)

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

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

应该可以to do this using Wireshark,是的。

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