You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

DMZ机器连接SQL Server报错求助:预登录握手阶段连接被强制关闭

解决DMZ机器数据库预登录握手时连接被强制关闭的问题

我之前处理过好几起类似的DMZ环境下数据库预登录握手失败的问题,结合你遇到的**"已成功与服务器建立连接,但在预登录握手阶段发生错误。(provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"** 这个报错,给你几个针对性的排查和解决方向:

  • 检查DMZ网络设备的拦截规则
    这个报错最常见的原因是防火墙或IPS设备拦截了预登录阶段的TLS/SSL协商数据包。你需要:

    • 确认防火墙已放行数据库服务器的目标端口(默认1433,若自定义端口需对应调整)
    • 查看防火墙/IPS的日志,是否有针对该数据库连接的拦截记录(部分设备会把预登录握手的加密流量误判为恶意请求)
    • 可以临时放宽DMZ机器到数据库服务器的IP规则,测试是否能正常连接,以此验证是否是网络设备的问题
  • 验证数据库的加密配置与客户端兼容性
    如果数据库开启了强制加密,而DMZ机器的客户端未正确处理证书,会导致握手失败:

    • 尝试在连接字符串中添加Encrypt=NO(若业务允许不加密连接),测试是否能绕过报错
    • 检查SQL Server服务器属性的「连接」选项,确认Force Encryption的设置状态;若开启,需确保DMZ机器的客户端信任数据库服务器的SSL证书(可以将证书导入客户端的信任存储)
  • 调整TCP/IP协议相关参数
    MTU不匹配或TCP KeepAlive设置异常也可能触发连接被强制关闭:

    • 尝试降低DMZ机器的MTU值(比如改为1400),避免数据包在传输过程中被分片导致握手失败
    • 检查SQL Server端TCP/IP属性中的「Keep Alive」和「Keep Alive Interval」设置,确保与DMZ机器的TCP参数兼容
  • 排查数据库服务器的资源与连接限制
    服务器资源耗尽或连接数超限会主动关闭新连接:

    • 查看SQL Server的错误日志(路径:Management Studio → 管理 → SQL Server日志),是否有资源不足、连接数超出上限的相关报错
    • 检查服务器的CPU、内存使用率,确认是否存在资源瓶颈
  • 更换数据库驱动版本测试
    旧版本的数据库驱动可能在TLS协商上存在兼容性问题:

    • 尝试使用最新版本的官方驱动(比如ODBC Driver 17 for SQL Server)重新连接,验证是否是驱动导致的握手失败

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

火山引擎 最新活动