我有一个与 OpenSSL 1.0.2k 动态链接的 C++ 应用程序。应用程序有2种风格,一种连接到MSSQL服务器,另一种连接到MySQL(由ini参数决定启动)。
我最近决定将我在应用程序中使用的 OpenSSL 版本升级到 1.1.1l。
当我将 OpenSSL 升级到 1.1.1l 时,当我的应用程序和数据库服务器都在 RHEL7 上运行时,我开始遇到应用程序无法连接到 MSSQL 或 MySQL 服务器的问题。并且当应用程序在 RHEL 和 DBServer 上时
所以,图表看起来像这样
RHEL7 上的应用程序,RHEL7 上的 DBServer - 不工作
RHEL7 上的应用程序,Win 上的 DBServer - 不工作
Win 上的应用程序,RHEL7 上的 DBServer - 工作
Win 上的应用程序,Win 上的 DBServer - 工作
现在,我用谷歌搜索了一下,但没有找到太多。我设法找到的是,这与仅支持 OpenSSL 1.0.2 的 RHEL7 有关,而我在我的应用程序中使用 OpenSSL 1.1.1l。
在我的应用程序中,我使用 MariaDB Connector/C 版本 3.1.8。用于连接 MySQL。为了连接到我在 RHEL 上使用的 MSSQL,我使用 unixODBC 驱动程序 2.3.4 当我在 mariadb 连接器共享库 - libmariadb.so 上执行 ldd 时,它打印出它依赖于 usr/lib64 中的 openssl 1.0
我在尝试连接到 MySQL 时得到的堆栈跟踪(这里我得到了段错误)
#8 0x00000000006bf8b5 in handle_sigsegv (sig=<optimized out>, info=<optimized out>, ucontext=<optimized out>)
#9 <signal handler called>
#10 0x00007f4175d3addb in ssl3_cleanup_key_block () from /lib64/libssl.so.10
#11 0x00007f4175d389a6 in ssl3_clear () from /lib64/libssl.so.10
#12 0x00007f4175d43399 in tls1_clear () from /lib64/libssl.so.10
#13 0x00000000007abba2 in SSL_new ()
#14 0x00007f4175fb7feb in ma_tls_init (mysql=mysql@entry=0x7f416c0008c0) at /home/buildbot/cc-centos7-amd64/build/libmariadb/secure/openssl.c:569
#15 0x00007f4175fa90ec in ma_pvio_tls_init (mysql=0x7f416c0008c0) at /home/buildbot/cc-centos7-amd64/build/libmariadb/ma_tls.c:71
#16 0x00007f4175fa8e1c in ma_pvio_start_ssl (pvio=0x7f416c003080) at /home/buildbot/cc-centos7-amd64/build/libmariadb/ma_pvio.c:527
#17 0x00007f4175f9bfcf in send_client_reply_packet (data_len=0, data=0x0, mpvio=0x7f4174277790) at /home/buildbot/cc-centos7-amd64/build/plugins/auth/my_auth.c:309
#18 client_mpvio_write_packet (mpv=0x7f4174277790, pkt=pkt@entry=0x0, pkt_len=pkt_len@entry=0) at /home/buildbot/cc-centos7-amd64/build/plugins/auth/my_auth.c:451
#19 0x00007f4175f9c069 in client_mpvio_read_packet (mpv=0x7f4174277790, buf=0x7f4174277738) at /home/buildbot/cc-centos7-amd64/build/plugins/auth/my_auth.c:399
#20 0x00007f4175f9b6f7 in native_password_auth_client (vio=0x7f4174277790, mysql=0x7f416c0008c0) at /home/buildbot/cc-centos7-amd64/build/plugins/auth/my_auth.c:73
#21 0x00007f4175f9c1ed in run_plugin_auth (mysql=mysql@entry=0x7f416c0008c0, data=<optimized out>, data_len=<optimized out>, data_plugin=data_plugin@entry=0x7f416c007aa4 "caching_sha2_password", db=db@entry=0x16d0c60 "TestMYSQL") at /home/buildbot/cc-centos7-amd64/build/plugins/auth/my_auth.c:601
#22 0x00007f4175fa5f0b in mthd_my_real_connect (mysql=0x7f416c0008c0, host=<optimized out>, user=<optimized out>, passwd=<optimized out>, db=0x16d0c60 "TestMYSQL", port=<optimized out>, unix_socket=<optimized out>, client_flag=65664) at /home/buildbot/cc-centos7-amd64/build/libmariadb/mariadb_lib.c:1646
#23 0x00007f4175fa15c8 in mysql_real_connect (mysql=0x7f416c0008c0, host=host@entry=0x16cfec0 "tuxtest01", user=0x16d0ca0 "TestMYSQL", passwd=0x16d0cc0 "Aaa12345", db=0x16d0c60 "TestMYSQL", port=3306, unix_socket=0x0, client_flag=65536) at /home/buildbot/cc-centos7-amd64/build/libmariadb/mariadb_lib.c:1295
连接到 MSSQL 时出现错误
[#0]SQLDriverConnect(): (08001) [Microsoft][ODBC Driver 17 for SQL Server]SSL 提供程序: [error:80001044:lib(128):func(1):internal error:unexpected error]
堆栈跟踪的顶部类似于 MySQL
#9 <signal handler called>
#10 0x00007f4175d3addb in ssl3_cleanup_key_block () from /lib64/libssl.so.10
#11 0x00007f4175d389a6 in ssl3_clear () from /lib64/libssl.so.10
#12 0x00007f4175d43399 in tls1_clear () from /lib64/libssl.so.10
#13 0x00000000007abba2 in SSL_new ()