C 将默认BIO_方法从OpenSSL 1.0.2迁移到1.1.1
我试图将我的应用程序代码从OpenSSL 1.0.2移植到1.1.1,但我遇到了一个我似乎无法理解的变化 在1.0.2中,我们通过调用以下命令替换了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 =
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()。