Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

421
Vistas
OPC UA Conexión segura en C#

Soy bastante nuevo en el protocolo OPC UA; Recientemente escribí una interfaz C para conectarme a algunas máquinas usando las bibliotecas de OPCFoundation, y hasta ahora no tuve que lidiar con certificados, ya que todas las máquinas permitían conexiones no seguras.

Ahora que tengo que conectarme a una máquina que usa certificados, ¿cómo debo modificar mi código para simular la acción "confiar en el certificado del servidor" que puedo realizar en el software UAExpert, que advierte sobre el certificado, pero me permite confiar en el certificado desde el máquina (guardándolo en una carpeta local) y continuar con la sesión?

En mi código, tengo "AutoAcceptUntrustedCertificates = true" , pero cuando trato de abrir la sesión obtengo un

Opc.Ua.ServiceResultException "El certificado no es de confianza.\r\nSubjectName: CN=NxOpcUaServer@192.168.1.10 ..."

Gracias por adelantado

 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()) { [read value from the node] } } catch (Opc.Ua.ServiceResultException e) { } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Con el punto final seguro de OPC UA, siempre debe proporcionar un certificado de cliente. No puede omitir esto, y el servidor debe tener este certificado en su lista de confianza. De lo contrario, el servidor probablemente rechazará su conexión.

No puedo ver en su código que proporciona su certificado de cliente.

No puede anular esto con un lado del cliente AutoAcceptUntrustedCertificates=true.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda