我确实创建了一个这样的 opc-ua 服务器:
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()
}
}
var server = new opcua.OPCUAServer(opcOptions);
但这会以某种方式在控制台中产生此错误消息:
10:45:20.058Z :verify :48 [NODE-OPCUA-W06] The certificate subjectAltName does not match the server applicationUri
... Please regenerate a specific certificate that matches your server applicationUri
... certificate subjectAltName = urn:DESKTOP-6B2NRGG:NodeOPCUA-Server
... server applicationUri = urn:WIN01:NodeOPCUA-Server
... certificateFile = C:\Users\xxx\AppData\Roaming\node-opcua-default-nodejs\Config\PKI\own\certs\certificate.pem
知道如何忽略/禁用此消息吗?
事实证明,即使服务器不使用 tls,
node-opcua
也会创建某种用于服务器的证书。当我第一次运行我的软件后,该证书是使用我的计算机的当前主机名创建的。不久前,我确实更改了主机名,因此该证书不再有效。
这些文件的位置是
C:\Users\user\AppData\Roaming\node-opcua-default-nodejs
。
删除整个文件夹将提示node-opcua在软件启动时使用所有证书重新创建它们,之后错误消息消失。
NODE-OPCUA-W06
警告表示服务器证书与服务器设置(主要是applicationUri和主机名)不匹配。
发生这种情况时,会导致很难发现连接问题,因为严格验证服务器证书的客户端会拒绝连接,怀疑证书不匹配。
最好的方法不是忽略警告,而是解决问题。
在大多数情况下,这可以通过删除警告消息中指出的证书文件并重新启动服务器来完成。
将使用正确的信息自动重新生成新的默认证书。
然而,在安全的工业环境中,证书是由证书颁发机构生成的。在这种情况下,必须由外部应用程序重新生成证书。
书 NodeOPCUA by Example Edition 2024 包含有关使用自定义证书管理的基于 NodeOPCUA 的服务器的部分,在这方面阅读可能会很有趣。
对于那些关心 OPC UA 通信安全并希望在 NodeOPCUA 服务器中使用推拉证书管理对服务器证书进行编程控制的人,可以向库的作者请求 NodeOPCUA 的专用 GDS 库