You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy配置SSL连接失败求助:ODBC驱动证书路径报错

问题:SQLAlchemy配置SSL连接失败排查

环境信息:

  • Python: 3.11
  • SQLAlchemy: '2.0.28'

我多次尝试手动配置SSL连接,但系统始终无法识别我的SSL配置,每次运行都会得到相同的错误输出。

代码如下:

import ssl
from sqlalchemy import create_engine
import pandas as pd
import os

ssl_context = ssl.create_default_context(cafile="vt_root.crt")
ssl_context.verify_mode = ssl.CERT_REQUIRED
connect_args = {"ssl": ssl_context}
server = "SERVER"
database = "DB"
username = "USER"
password = "PW"
driver = "ODBC Driver 18 for SQL Server"
url = f"mssql://{username}:{password}@{server}/{database}?driver={driver}"
engine = create_engine(url, connect_args=connect_args)
connection = engine.connect()

报错信息:

操作错误:
('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:16000069:STORE routines::unregistered scheme:scheme=file][error:80000002:system library::No such file or directory:calling stat(/opt/bitnami/miniconda/envs/python3.11/ssl/certs)] (-1) (SQLDriverConnect)')


问题分析与解决

  1. 证书路径定位错误
    报错显示系统找不到指定的证书目录,且你使用了相对路径vt_root.crt,程序无法确定证书的准确位置。

    • 解决:将vt_root.crt替换为绝对路径,比如/home/youruser/certs/vt_root.crt,同时确保该文件存在且程序有读取权限。
  2. SSL配置方式不兼容ODBC驱动
    手动创建的Python ssl.SSLContext对象无法被Microsoft ODBC Driver 18 for SQL Server识别,该驱动需要通过URL参数或ODBC连接属性来配置SSL。

    • 解决:改用URL参数传递SSL配置,示例代码:
      from sqlalchemy import create_engine
      import pandas as pd
      import os
      
      server = "SERVER"
      database = "DB"
      username = "USER"
      password = "PW"
      driver = "ODBC Driver 18 for SQL Server"
      # 直接在URL中指定SSL参数
      url = f"mssql://{username}:{password}@{server}/{database}?driver={driver}&Encrypt=yes&TrustServerCertificate=no&Certificate=/path/to/vt_root.crt"
      engine = create_engine(url)
      connection = engine.connect()
      
    • 参数说明:
      • Encrypt=yes:强制启用SSL加密
      • TrustServerCertificate=no:要求验证服务器证书
      • Certificate:指定CA证书的绝对路径
  3. 系统证书目录缺失
    报错提到的/opt/bitnami/miniconda/envs/python3.11/ssl/certs目录不存在,可通过两种方式处理:

    • 手动创建该目录,将vt_root.crt放入其中;
    • 设置环境变量指定证书路径:
      os.environ['SSL_CERT_FILE'] = '/path/to/vt_root.crt'
      

内容的提问来源于stack exchange,提问作者Codernew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:43:18