未启用TLS/证书时Node.js OPC-UA服务器证书警告屏蔽方法
解决Node-OPCUA证书subjectAltName与applicationUri不匹配的警告
方法1:强制使用无安全策略的通信
node-opcua默认启用加密通信,即使未显式配置TLS,也会自动使用生成的证书。通过限定服务器仅使用无安全策略的通信模式,可跳过证书检查:
修改服务器配置,添加securityPolicies和securityModes参数:
var opcOptions = { hostname: options.opcHost || "127.0.0.1", port: options.opcPort || 4334, resourcePath: options.opcName || "opcua", buildInfo: { productName: "OPCUA", buildNumber: "0.1", buildDate: new Date() }, // 新增配置:仅启用无安全策略 securityPolicies: [opcua.SecurityPolicy.None], securityModes: [opcua.MessageSecurityMode.None] } var server = new opcua.OPCUAServer(opcOptions);
方法2:调整日志屏蔽特定警告
方式A:仅输出错误日志
将日志级别设为error,直接屏蔽所有警告信息:
const opcua = require("node-opcua"); // 在创建服务器前配置日志级别 opcua.setLogger(opcua.createLogger({ level: "error" })); // 初始化服务器 var opcOptions = { /* 你的原有配置 */ }; var server = new opcua.OPCUAServer(opcOptions);
方式B:精准屏蔽[NODE-OPCUA-W06]警告
自定义日志处理器,仅跳过目标警告,保留其他日志:
const opcua = require("node-opcua"); const defaultLogger = opcua.createLogger({ level: "warn" }); opcua.setLogger({ log: (message, level, category) => { // 过滤掉包含[NODE-OPCUA-W06]的警告 if (level === "warn" && message.includes("[NODE-OPCUA-W06]")) { return; } defaultLogger.log(message, level, category); } }); // 初始化服务器 var opcOptions = { /* 你的原有配置 */ }; var server = new opcua.OPCUAServer(opcOptions);
方法3:重新生成匹配的证书
警告源于现有证书的主机名与当前服务器主机名不匹配,删除旧证书让node-opcua自动生成新证书:
- 找到证书路径:
C:\Users\xxx\AppData\Roaming\node-opcua-default-nodejs\Config\PKI\own\certs\ - 删除该路径下的
certificate.pem和private_key.pem文件 - 重启服务器,新证书会匹配当前主机名,警告自动消失
内容的提问来源于stack exchange,提问作者sirzento
相关产品推荐
相关产品推荐

