Hi All,
A little context, we have an older version of Ignition that connects to a 3rd party (IGS OPC UA Server) on a remote computer. We started seeing issues 30 mins after the OPC UA certificate expired(03/24/25). When we figured the issue out the next day(03/25/25), we regenerated a new certificate(Actually certificates, The certificate did not refresh immediately and hence the multiple tries) that the IGS opc server caught. I had to go to the OPC UA configuration manager and Trust the certificates that were generated. Today i.e 03/26/25, we did our monthly server reboot on both the servers and lost communication between the two servers. I see the following error:
com.inductiveautomation.opcua.InternalUAException: java.net.ConnectException: Connection refused: connect
com.inductiveautomation.xopc.client.stack.TCPClientChannel.open(TCPClientChannel.java:246)
com.inductiveautomation.xopc.client.stack.UaClient.connect(UaClient.java:65)
com.inductiveautomation.xopc.client.OpcUaConnection.verifyConnectionState(OpcUaConnection.java:142)
com.inductiveautomation.xopc.client.FailoverAwareOpcUaConnection.verifyConnectionState(FailoverAwareOpcUaConnection.java:75)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$ServerWrapper.verifyConnectionState(OPCManagerImpl.java:740)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$OPCConnectionKeepalive.run(OPCManagerImpl.java:616)
com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:573)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
java.net.ConnectException: Connection refused: connect
java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
java.net.Socket.connect(Socket.java:589)
com.inductiveautomation.xopc.client.stack.TCPClientChannel.open(TCPClientChannel.java:238)
com.inductiveautomation.xopc.client.stack.UaClient.connect(UaClient.java:65)
com.inductiveautomation.xopc.client.OpcUaConnection.verifyConnectionState(OpcUaConnection.java:142)
com.inductiveautomation.xopc.client.FailoverAwareOpcUaConnection.verifyConnectionState(FailoverAwareOpcUaConnection.java:75)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$ServerWrapper.verifyConnectionState(OPCManagerImpl.java:740)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$OPCConnectionKeepalive.run(OPCManagerImpl.java:616)
com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:573)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
The error we had after the initial certificate expiration is:
com.inductiveautomation.opcua.UAException: Could not open secure channel to opc.tcp://x.x.x.x:49320/.
com.inductiveautomation.xopc.client.stack.TCPClientChannel.open(TCPClientChannel.java:265)
com.inductiveautomation.xopc.client.stack.UaClient.connect(UaClient.java:65)
com.inductiveautomation.xopc.client.OpcUaConnection.verifyConnectionState(OpcUaConnection.java:142)
com.inductiveautomation.xopc.client.FailoverAwareOpcUaConnection.verifyConnectionState(FailoverAwareOpcUaConnection.java:75)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$ServerWrapper.verifyConnectionState(OPCManagerImpl.java:740)
com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$OPCConnectionKeepalive.run(OPCManagerImpl.java:616)
com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:573)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
com.jniwrapper.win32.com.ComException: COM object method returns error code: 0x800401F3; CO_E_CLASSSTRING (Invalid class string)
at com.jniwrapper.win32.com.impl.IUnknownImpl.invokeStandardVirtualMethod(SourceFile:762)
at com.jniwrapper.win32.com.impl.IUnknownImpl.invokeStandardVirtualMethod(SourceFile:741)
at com.inductiveautomation.opccom.interop.opcenumlib.impl.IOPCServerList2Impl.CLSIDFromProgID(IOPCServerList2Impl.java:96)
at com.inductiveautomation.opccom.wrapper.browsing.OpcEnum$GetClsidJob.internalRun(OpcEnum.java:199)
at com.inductiveautomation.opccom.wrapper.OleJob.run(OleJob.java:48)
at com.inductiveautomation.opccom.wrapper.OleJob.runInOleLoop(OleJob.java:27)
at com.inductiveautomation.opccom.wrapper.browsing.OpcEnum.getClsIdForProgId(OpcEnum.java:97)
at com.inductiveautomation.opccom.COMServerImpl$ConnectServerJob.internalRun(COMServerImpl.java:704)
at com.inductiveautomation.opccom.wrapper.OleJob.run(OleJob.java:48)
at com.jniwrapper.win32.MessageLoopThread$ThreadSynchronizedAction.run(MessageLoopThread.java:620)
at com.jniwrapper.win32.MessageLoopThread$LoopThread.run(MessageLoopThread.java:562)
Please help me troubleshoot this. We did try requesting connections to the OPC server from generic opc clients and it worked but Ignition for some reason is not sending those requests. I also tried manually importing the newly generated certificate to the OPC server and still have the issues.