为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8(具体版本待补充)
【操作系统】:macOS
【CPU】:Apple M1
【问题描述】*:
Node.js 项目使用 dmdb@1.0.52452 驱动连接达梦数据库。服务端配置 ENABLE_ENCRYPT=4(仅开启 SSL 通信加密,不进行客户端认证)后,连接报错:
[20010] 网络通讯超时
TCP 端口可以正常连接,但驱动在登录阶段超时。调整超时时间、切换 loginEncrypt 均未解决。
连接配置如下(敏感信息已打码):
{
connectionString: '***.***.***.***:5236',
user: '******',
password: '******',
schema: '******',
connectTimeout: 15000,
socketTimeout: 15000,
loginEncrypt: false
}
排查驱动源码发现,src/net/access.js 仅对 SSL 模式 1/2 调用 startTLS(),未处理模式 4;同时,startTLS(false) 原本会报不支持 SSL 认证。
目前通过以下临时补丁修复,共修改 3 行代码,仅为模式 4 增加支持,保留模式 1/2 原有逻辑:
--- a/src/driver/connection.js
+++ b/src/driver/connection.js
@@
- var r = e._createSecureContext();
- n ? (e.tlsSocket = tls_1.connect({
+ var r = 4 === e.sslEncrypt ? tls_1.createSecureContext() : e._createSecureContext();
+ n || 4 === e.sslEncrypt ? (e.tlsSocket = tls_1.connect({
--- a/src/net/access.js
+++ b/src/net/access.js
@@
- return r = t.sent(), 2 !== this.pt.sslEncrypt ? [ 3, 3 ] : [ 4, this.pt.startTLS(!1) ];
+ return r = t.sent(), 2 !== this.pt.sslEncrypt && 4 !== this.pt.sslEncrypt ? [ 3, 3 ] : [ 4, this.pt.startTLS(!1) ];
应用补丁后,已在 ENABLE_ENCRYPT=4 环境下成功连接并执行 SELECT 1 FROM DUAL。
希望官方确认该兼容问题及补丁方案,并在后续 dmdb Node.js 驱动中原生支持 ENABLE_ENCRYPT=4;如已有受支持的连接配置,也请提供说明。
