【问题标题】:ODBC Driver 18 for SQL Server]SSL Provider: [error:1416F086]SQL Server 的 ODBC 驱动程序 18]SSL 提供程序:[错误:1416F086]
【发布时间】:2022-06-15 16:22:10
【问题描述】:

尝试连接 SQL Server 时出现以下错误:

[Microsoft][ODBC Driver 18 for SQL Server]SSL 提供程序:[错误:1416F086:SSL 例程:tls_process_server_certificate:证书验证失败:自签名证书]

我在 Ubuntu 20、PHP 7.4 FPM、nginx 上。

服务器 Microsoft SQL Server [11.00.3128 Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 2012 年 12 月 28 日 20:23:12 版权所有 (c) 微软公司 Windows NT 6.2(内部版本 9200:)(管理程序)上的标准版(64 位) ]

当我:

openssl s_client -connect myserverip:1433 -tls1

我明白了:

已连接(00000003)

我的 openssl 库版本是:

OpenSSL 1.1.1f 2020 年 3 月 31 日(库:OpenSSL 1.1.1k 2021 年 3 月 25 日)

我尝试了很多方法,比如强制系统在 /etc/ssl/openssl.cnf 中使用 TLS1 或 nginx 配置降级到 tls1。

【问题讨论】:

  • 与TLS协议版本无关。安装 SQL Server 时,它配置有自签名 X.509 证书。如果您想使用加密连接(在连接字符串中使用Encrypt=yes;,这是现在的默认设置),您需要 1) 从服务器获取 X.509 证书的公钥并将其添加到您的受信任证书存储中在客户端上或 2) 在连接字符串中使用 TrustServerCertificate=yes; 设置。
  • 阅读 ODBC Driver 18.0 for SQL Server Released 中的重大更改。
  • 非常感谢!它正在工作知道!亲切的问候
  • 嘿@Matt 你能告诉我你是怎么让它工作的吗?我有完全相同的错误

标签: php sql-server ubuntu openssl


【解决方案1】:

正如@AlwaysLearning 在 cmets 中所说,您需要将 TrustServerCertificate=yes; 添加到您的连接字符串中。

类似

"DRIVER={ODBC Driver 18 for SQL Server};SERVER=$url;DATABSE=$db;UID=$usr;TrustServerCertificate=yes;"

应该可以。

【讨论】:

    【解决方案2】:

    在将 ODBC Driver 18 与 sqlalchemy + python 3.9 一起使用时,我遇到了同样的错误。我的解决方案与@Olsgaard 相同——将TrustServerCertificate 参数设置为yes。使用 sqlalchemy,您可以在create_engine 中的connect_args 键处设置它:

    conn_string = ...
    engine = sqlalchemy.create_engine(
        conn_string,
        connect_args = {
            "TrustServerCertificate": "yes"
        }, echo=False)
    

    我认为我的答案是相关的,因为当您在使用 sqlalchemy 遇到这个确切错误后谷歌搜索这个确切的错误时,这个问题的链接首先会弹出......

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 2018-07-26
      • 2016-12-12
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多