如何获取OPC UA客户端证书(.NET)

v7pvogib  于 2023-03-31  发布在  .NET
关注(0)|答案(2)|浏览(1385)

我正在为OPC UA服务器开发C#客户端。我不是OPC基金会的付费会员,因此无法访问SDK。我使用的是免费提供的示例应用程序和.NET堆栈。
我面临的一个问题是我没有安全证书。我的客户端可以连接到服务器,但它是在不安全的模式下连接的。这导致无法访问服务器上的数据库。我相信我缺少客户端(也可能是服务器端)证书。我可以完全访问服务器的管理,但我一直无法弄清楚如何检索/生成证书。我该怎么做?

cld4siwp

cld4siwp1#

一般来说,如何获取客户端证书是OPC UA客户端应用程序的责任。通常,如果没有生成和配置证书,则SDK会创建默认的自签名证书。如果您查看.NET UA应用程序的xml配置文件,则应该找到定义证书参数的位置,并且可以自动生成证书。为了通过安全模式进行通信,客户端和服务器都应该信任对方的证书。如果证书存储在文件系统中,则可以通过将客户端证书复制到服务器的受信任文件夹来设置自签名证书的信任,反之亦然。通过编程可以通过GetEndpoints调用获得服务器证书。服务器可以从OpenSecureChannel请求中获得客户端证书。

rryofs0p

rryofs0p2#

在OPC基金会的opc ua客户端中,您可以使用以下代码自动创建自签名客户端证书并接受服务器证书:

SecurityConfiguration = new SecurityConfiguration
            {
                ApplicationCertificate = new CertificateIdentifier { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = "MyClient" },
                TrustedIssuerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities" },
                TrustedPeerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications" },
                RejectedCertificateStore = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates" },
                AutoAcceptUntrustedCertificates = true
            },

您还可以通过将SubjectName更改为要使用的证书的CN来指定要使用的证书(自定义证书)。只需确保将私钥放在专用文件夹中即可。
如果你把第二个参数设置为true,它将在连接到你的服务器时使用安全(证书)。

var selectedEndpoint = CoreClientUtils.SelectEndpoint("opc.tcp://" + ip + ":" + port, true);

相关问题