【问题标题】:Decrypt ssl network packets with the keys acquired from openssl api使用从 openssl api 获取的密钥解密 ssl 网络数据包
【发布时间】:2011-05-26 11:58:16
【问题描述】:

我有一个在我的计算机上运行的客户端应用程序,它使用 openssl 与使用 SSLv3 的服务器进行通信。我需要看看他们在说什么,所以我基本上想编辑和重新编译 openssl 库以获得相关的加密密钥。

应用程序通常使用 TLS-DHE-RSA-WITH-AES-256-CBC-SHA 作为密码套件。有时它使用 aes128 而不是 aes256,但这在现阶段并不重要。到目前为止,我编辑了 s3_enc.c 文件。在 ssl3_setup_key_block 函数结束时,我将主密钥、密钥块(因此客户端-服务器写入密钥、mac 密钥和 IV)、服务器和客户端随机写入文件。 http://www.ietf.org/rfc/rfc2246.txt 表示如果流密码是可导出的,则客户端-服务器写入密钥将相应地更新为最终的客户端-服务器写入密钥。我不确定这个密码套件是否被认为是可导出的(无论这意味着什么),但无论如何我都会创建最终的写入密钥。

问题是无论我尝试了什么,我都无法成功解密使用wireshark获取的任何数据包。无论如何,输出都是毫无意义的,我被卡住了。我正在考虑在解密后检查数据包的 mac 字段,以查看解密是否正确。但这似乎也是一条死胡同。

有谁知道我错过了什么,我可能做错了什么?

【问题讨论】:

    标签: ssl openssl aes encryption symmetric-key


    【解决方案1】:

    如果您可以修改 OpenSSL 并让您的客户端应用程序使用它,那么您需要做的就是让修改后的 OpenSSL 将解密的数据转储到文件中。更简单的替代方法是让 OpenSSL 使用 NULL 密码套件之一,即使应用程序请求某些加密也是如此。

    【讨论】:

    • 感谢您的回答。我还尝试将解密的数据包打印到文件中,但由于 openssl 源是一堆垃圾,没有代码 cmets 和可靠的文档,我找不到可以成功找到这些解密数据包的地方。我认为服务器不会接受空加密连接,但值得一试。谢谢。
    • @Yigit:在ssl_lib.c 中修补SSL_read()SSL_write() - 这些是应用程序将调用以读取和写入连接的明文端的函数。
    • @caf 回复评论者,放 at 符号,然后评论者姓名,后面没有分号。这就是 stackoverflow 引擎的工作方式。
    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2021-12-11
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多