我正在开展道德黑客攻击项目,通过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基本上在握手时获得证书并利用它来解密数据。有没有办法离线提供相同的证书来解密数据。
任何帮助/指针都会非常值得注意。
答案 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 ;国家安全局也不能这样做。