如何使用node-opcua连接Kepware OPCUA服务器时设置客户端名称
解决node-opcua客户端证书自定义命名问题
你遇到的问题根源在于仅设置了applicationName,但node-opcua生成客户端证书时核心依赖**applicationUri**这个唯一标识,同时需要让OPCUACertificateManager明确关联自定义应用信息来生成证书。以下是具体解决步骤:
关键修改点
- 显式配置
applicationUri:这是OPC UA规范定义的客户端唯一标识符,证书会与该URI绑定,Kepware通过它区分不同客户端。 - 给
OPCUACertificateManager传入applicationUri和applicationName:确保证书生成时嵌入自定义的应用名称信息。 - 清理旧证书:若之前生成过默认的
NodeOPCUA-Client证书,需删除PKI目录下的旧证书文件,强制重新生成新证书。
修改后的配置代码
const clientOptions = { // 显式设置应用名称和唯一URI applicationName: "WBFNodeOPCUA-Client", applicationUri: "urn:WBFNodeOPCUA-Client", // 建议用urn格式保证唯一性 endpointMustExist: true, securityMode: MessageSecurityMode.SignAndEncrypt, securityPolicy: SecurityPolicy.Basic256Sha256, connectionStrategy: { maxRetry: 5, initialDelay: 1000, maxDelay: 10000 }, certificateManager: new OPCUACertificateManager({ automaticallyAcceptUnknownCertificate: true, rootFolder: pkiDir, keySize: 2048, // 将应用信息传入证书管理器,确保证书嵌入自定义名称 applicationUri: "urn:WBFNodeOPCUA-Client", applicationName: "WBFNodeOPCUA-Client" }), }; let client = OPCUAClient.create(clientOptions);
额外注意事项
applicationUri必须全局唯一,不同客户端需设置不同URI(比如区分后缀:urn:WBFNodeOPCUA-Client-App1、urn:WBFNodeOPCUA-Client-App2)。- 清理旧证书:找到
pkiDir对应文件夹,删除own/certs和own/private下的文件,重新运行客户端会生成带自定义名称的新证书。 - Kepware信任配置:新生成的客户端证书需被Kepware信任,可手动在Kepware的OPC UA服务器设置中添加信任,生产环境不建议开启自动信任。
内容的提问来源于stack exchange,提问作者Avi4nFLu




