siw_2000 Inserito: 8 febbraio 2022 Segnala Share Inserito: 8 febbraio 2022 Buongiorno, recentemente ho realizzato un'interfaccia C# che permette di collegare il nostro software gestionale alle macchine che utilizzano il protocollo OPC UA. Per la realizzazione ho utilizzato le librerie della OPC Foundation; finora tutte le macchine a cui mi sono interfacciato non utilizzavano i certificati per gestire la sicurezza della comunicazione. Dovendo ora connettermi a una che li gestisce, ho bisogno di dichiarare come "trusted" il certificato che ricevo dal server: come devo modificare il mio sorgente? Questa è la parte di codice con la funzione CallOpcUA() che si connette e legge un nodo. using Opc.Ua; using Opc.Ua.Client; using Opc.Ua.Configuration; private static String CallOpcUA(string indirizzoMacchina, string displayNome, string idNodo) { var config = new ApplicationConfiguration() { ApplicationName = "MyApp", ApplicationUri = Utils.Format(@"urn:{0}:MyApp", System.Net.Dns.GetHostName()), ApplicationType = ApplicationType.Client, SecurityConfiguration = new SecurityConfiguration { ApplicationCertificate = new CertificateIdentifier { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = "MyApp" }, 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 }, TransportConfigurations = new TransportConfigurationCollection(), TransportQuotas = new TransportQuotas { OperationTimeout = 15000 }, ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }, TraceConfiguration = new TraceConfiguration() }; config.Validate(ApplicationType.Client).GetAwaiter().GetResult(); if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates) { config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); }; config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateTimeInvalid); }; } var application = new ApplicationInstance { ApplicationName = "MyApplication", ApplicationType = ApplicationType.Client, ApplicationConfiguration = config }; try { application.CheckApplicationInstanceCertificate(false, 2048).GetAwaiter().GetResult(); } catch (System.IO.FileLoadException e) { } try { identity = new UserIdentity(); var selectedEndpoint = CoreClientUtils.SelectEndpoint(indirizzoMacchina, useSecurity: false); using (var session = Session.Create(config, new ConfiguredEndpoint(null, selectedEndpoint, EndpointConfiguration.Create(config)), false, "", 60000, identity, null).GetAwaiter().GetResult()) { [vado a leggere il valore del nodo richiesto] } } catch (Opc.Ua.ServiceResultException e) { } } Link al commento Condividi su altri siti More sharing options...
fedebg Inserita: 10 febbraio 2022 Segnala Share Inserita: 10 febbraio 2022 Finora, neanche io ho attivato l'uso dei certificati. Ho guardato l'esempio di Client OPC UA in C# proposto da Siemens, e so che utilizza le librerie di OpcFoundation https://support.industry.siemens.com/cs/document/109737901/creating-of-opc-ua-clients-with-net-and-helper-class?dti=0&lc=en-WW Probabilmente, nella documentazione forniscono indicazioni sull'uso dei certificati. Forse è materiale che già conosci. Ciao Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora