我已经找到了这个问题的答案,只是想记录我的发现。
使用最新版本的 NW.js(和 Node.js)时,我在使用 node-mssql / tedious 模块时遇到问题。即使像连接到SQL Server服务器这样简单的任务也会抛出SSL例程:ssl_choose_client_version:不支持的协议错误。
引发错误的原因与 Node.js 12 中的更改有关。从版本 12 开始,TLS 设置更加严格,默认需要 TLS 1.2。如果 SQL Server 服务器不支持 TLS 1.2,则会抛出 SSL 例程:ssl_choose_client_version:不支持的协议 错误。
在 Node 中,启动节点时可以使用命令行标志
--tls-min-v1.0
来更改默认设置。由于 NW 无法将命令行标志传递到 Node 上下文,因此解决方案是在指定 cryptoCredentialsDetails
的连接配置中设置自定义 minVersion: 'TLSv1'
选项,如下所示:
mssql.connect({
user: "this.user",
password: "this.password",
server: "this.server",
database: "this.database",
options: {
cryptoCredentialsDetails: {
minVersion: 'TLSv1'
}
}
});
您看到的警告(弃用警告:RFC 6066 不允许将 TLS 服务器名称设置为 IP 地址)与在 TLS 握手中使用 IP 地址而不是主机名有关,通常更多的是警告比严重错误。但是,您面临的连接错误更为重要,它表明使用 SSL/TLS 连接到 SQL Server 时出现问题。
尝试通过显式指定选项并禁用 SSL 来调整连接配置。例如:
const config = {
user: 'your_username',
password: 'your_password',
server: 'your_sql_server',
database: 'your_database',
options: {
encrypt: false, // Disable SSL/TLS
},
};