【问题标题】:Migration of default BIO_METHOD from OpenSSL 1.0.2 to 1.1.1将默认 BIO_METHOD 从 OpenSSL 1.0.2 迁移到 1.1.1
【发布时间】:2019-09-13 17:24:09
【问题描述】:

我正在尝试将我的应用程序代码从 OpenSSL 1.0.2 移植到 1.1.1,但我遇到了一个我似乎无法理解的更改。

在 1.0.2 中,我们通过调用替换了 BIO_s_socket 的默认 breadbwrite 方法:

orig_bread = BIO_s_socket()->bread;
orig_bwrite = BIO_s_socket()->bwrite;
BIO_s_socket()->bread = my_bread;
BIO_s_socket()->bwrite = my_bwrite;

但是,在 OpenSSL 1.1.1 中,BIO_s_socket() 据说返回 const BIO_METHOD* 而不是 BIO_METHOD*。如何更改此版本中的默认行为?

编辑:(......如果不能再这样做了,我如何为每个 ssl 连接设置一个面包和 bwrite?)

【问题讨论】:

    标签: c openssl


    【解决方案1】:

    我正在尝试将我的应用程序代码从 OpenSSL 1.0.2 移植到 1.1.0

    首先,我建议您迁移到 1.1.1 而不是 1.1.0。 1.1.1 是长期支持版本 (LTS),将一直支持到 2023 年。1.1.0 支持将于今年晚些时候结束。

    您需要创建自定义 BIO_METHOD。简而言之,您使用BIO_meth_new() 创建一个,然后使用BIO_meth_set_read()BIO_meth_set_write() 设置自定义读写函数。根据您的 BIO_METHOD 所做的事情,您可能需要调用其他设置函数。它们都记录在这里:

    https://www.openssl.org/docs/man1.1.1/man3/BIO_meth_new.html

    【讨论】:

    • 这是最简单的部分。如何像在我的原始代码中一样将其设置为默认 BIO_METHOD?
    • 您无法更改 BIO_s_socket() 返回的默认 BIO_METHOD。您只需要确保您现在在代码中调用 BIO_s_socket() 的任何位置,都将其替换为一些返回新创建的自定义 BIO_METHOD 的函数。如果您从不这样做,因为您使用 SSL_set_fd/SSL_set_wfd/SSL_set_rfd 将文件描述符直接设置到 SSL 对象中,然后换成使用 SSL_set0_rbio() 和 SSL_set0_wbio()。
    猜你喜欢
    • 2021-11-28
    • 2010-11-19
    • 2010-12-25
    • 2015-08-29
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多