C 将默认BIO_方法从OpenSSL 1.0.2迁移到1.1.1

C 将默认BIO_方法从OpenSSL 1.0.2迁移到1.1.1,c,openssl,C,Openssl,我试图将我的应用程序代码从OpenSSL 1.0.2移植到1.1.1,但我遇到了一个我似乎无法理解的变化 在1.0.2中,我们通过调用以下命令替换了BIO_s_socket的默认bread和bwrite方法: orig_bread = BIO_s_socket()->bread; orig_bwrite = BIO_s_socket()->bwrite; BIO_s_socket()->bread = my_bread; BIO_s_socket()->bwrite =

我试图将我的应用程序代码从OpenSSL 1.0.2移植到1.1.1,但我遇到了一个我似乎无法理解的变化

在1.0.2中,我们通过调用以下命令替换了
BIO_s_socket
的默认
bread
bwrite
方法:

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\u s\u socket()
返回
const BIO\u METHOD*
,而不是
BIO\u METHOD*
。如何更改此版本中的默认行为

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

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

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

您需要创建一个自定义的BIO_方法。简而言之,您可以使用
BIO\u meth\u new()
创建一个,然后使用
BIO\u meth\u set\u read()
BIO\u meth\u set\u write()
设置自定义读写函数。根据BIO_方法的不同,您可能需要调用其他set函数。它们都记录在这里:


这是最简单的部分。如何像在我的原始代码中一样将其设置为默认的BIO_方法?您不能更改BIO_s_socket()返回的默认BIO_方法。您只需要确保现在在代码中调用BIO_s_socket()的任何地方,都可以用返回新创建的自定义BIO_方法的函数替换它。如果您从未这样做,因为您正在使用SSL_set_fd/SSL_set_wfd/SSL_set_rfd将文件描述符直接设置到SSL对象中,然后将其替换为使用SSL_set0_rbio()和SSL_set0_wbio()。