如何使用 node-opcua 客户端信任自签名服务器证书

How to trust a self-signed server certificate with the node-opcua client

我有一个简单的 node-opcua 客户端,它想通过 Basic128Rsa15 策略连接到服务器。

我已经创建了一个自签名证书,服务器确实收到了这个证书,我可以将它移到服务器上的受信任的 pki 目录中。

在我的客户端 - node-opcua - 我还看到一个新目录“pki/rejected”,其中包含来自服务器的证书。

我现在的问题是:我现在必须做什么才能使客户端信任来自服务器的这个自签名证书?

我已经尝试创建一个“可信”目录并将其移动到那里,但这没有帮助,我还尝试添加一个选项(我通过 google 找到):serverCertificate =crypto_utils.readCertificate("pki/trusted/04c9f401be19e5a2349460306579c692e777cea5.pem");但这也无济于事。当我启动客户端时,它会再次在“rejected”文件夹中创建证书。

我的 node-opcua 连接选项:

选项: securityMode: 3 # None = 1, Sign = 2, SignAndEncrypt = 3 securityPolicy:“http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15” 证书文件:certificates/cert.pem 私有密钥文件:certificates/key.pem

[已编辑]

2.30 版以后:node-opcua 客户端现在执行来自服务器的完整证书验证:

  • 如果服务器证书已由 CA 生成,则 CA 证书必须与相应的 CRL 一起出现在客户端的 PKI 中(在颁发者文件夹中)。
  • 默认情况下,客户端证书管理器接受有效的未知服务器证书以向后兼容以前的版本。这可以通过将 automaticallyAcceptUnknownCertificates 设置为 false 来恢复。
  • 执行其他检查以验证服务器的证书是否严格符合 OPCUA 的要求,例如 subjectAltName.uniqueResourceIdentify 必须匹配服务器的 applicationUri,keyUsage,密钥长度等...
  • 如果服务器证书已知且在被拒绝的文件夹中,客户端将拒绝与服务器的连接。

版本 2.28 及以下:node-opcua 客户端尚未执行服务器证书 trust/reject 检查,也没有完整的证书验证,只是基本验证(日期、签名 ...)