如果连接器/ODBC 与 MySQL 服务器安全连接,并且使用该连接的应用程序自行调用 OpenSSL 库,则该应用程序可能会失败,因为 OpenSSL 库的两个副本将被使用。
Connector/ODBC 8.0 及更高版本动态链接到 OpenSSL,而早期的 Connector/ODBC 版本静态链接到 OpenSSL。这解决了与使用来自同一应用程序的两个 OpenSSL 副本相关的问题。
TLSv1.0 和 TLSv1.1 连接协议在连接器/ODBC 8.0.26 中已弃用,并在版本 8.0.28 中删除。
另请参阅 tls-versions 连接选项。
为防止出现此问题,在您的应用程序中,不允许同时在一个线程中初始化 OpenSSL 和在另一个线程中打开连接器/ODBC 连接(这也会初始化 openSSL)。例如,使用互斥锁来确保SQLDriverConnect()
or
SQLConnect()
调用和 openSSL 初始化之间的同步。除此之外,如果可能,请执行以下操作:
使用连接器/ODBC 的构建(静态或动态)链接到
libmysqlclient
库的某个版本,该版本又动态链接到应用程序调用的同一 OpenSSL 库。当创建链接(静态或动态)到
libmysqlclient
静态链接到 OpenSSL 库的库版本的连接器/ODBC 构建时,请勿在构建中导出 OpenSSL 符号。这可以防止不正确地解析应用程序符号;但是,这并不能避免在单个应用程序中运行两个 OpenSSL 代码副本所带来的其他问题。