Disable "Force Secure Redirect" from terminal

Hello,

We were configuring SSL on our gateway and apparently some SSL configuration was not done correctly. Since "Force Secure Redirect" was enabled, we are no longer able to access the gateway.

Is there any way to disable it from the outside?

The gateway is mounted on Docker.

Thanks!

Modify the value of the gateway.forceSecureRedirect key in data/gateway.xml.

Good! That solved the issue!

1 - Access terminal (from Docker Desktop, in our case):

nano data/gateway.xml

2 - Modify value
3 - Ctrl+X
4 - Save

If nano is not installed, access from the windows terminal and execute:

docker exec -it -u root be96 /bin/bash
apt-get update
apt-get install nano

I restored a production backup (with everything disabled) to my local machine (after installing the same Ignition version on it) and was able to access the gateway using http://localhost:8088.

The reason I restored to my local machine was becuase I wanted to access an old version of the tag provider through the Tag Browser in the designer but found that I could not open the designer (an error came up in the launcher before asking for credentials Error launching application: ConnectException: Connection refused:getsockopt).

I believe this is due to the fact that my local machine does not have SSL certs and the Force Secure Redirect setting was enabled and grayed out. Settinggateway.forceSecureRedirect key to false in data/gateway.xmland restarting gateway allowed me to access designer through http://localhost:8088 (I am kind of surprised I was able to access the gateway initially after restore with http://localhost:8088…).

When the designer opened, I got an error:

java.util.concurrent.ExecutionException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: java.lang.Exception: Provider 'default' not found:
at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
at com.inductiveautomation.ignition.designer.sqltags.opcbrowser.OpcBrowseExecutor$ProviderBrowseExecutor.browse(OpcBrowseExecutor.java:49)
at com.inductiveautomation.ignition.designer.sqltags.opcbrowser.AbstractOPCTreeNode.browse(AbstractOPCTreeNode.java:35)
at com.inductiveautomation.ignition.designer.sqltags.opcbrowser.OPCFolderNode.loadChildren(OPCFolderNode.java:52)
at com.inductiveautomation.ignition.client.util.gui.tree.AbstractAsynchronousTreeNode$Loader.run(AbstractAsynchronousTreeNode.java:82)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: java.lang.Exception: Provider 'default' not found:
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:360)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:334)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:287)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:967)
at com.inductiveautomation.ignition.client.tags.impl.GatewayTagInterface.browseTagDataSourcesAsync(GatewayTagInterface.java:183)
at com.inductiveautomation.ignition.client.tags.impl.GatewayTagInterface$GatewayProviderProxy.browseTagDataSourcesAsync(GatewayTagInterface.java:299)
at com.inductiveautomation.ignition.client.tags.impl.ClientTagManagerImpl.browseTagDataSourcesAsync(ClientTagManagerImpl.java:194)
... 9 more
Caused by: java.util.concurrent.ExecutionException: java.lang.Exception: Provider 'default' not found:
at java.util.concurrent.CompletableFuture.reportGet(null)
at java.util.concurrent.CompletableFuture.get(null)
at com.inductiveautomation.ignition.gateway.servlets.gateway.functions.TagProviderRpc.browseTagDataSources(TagProviderRpc.java:852)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(null)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(null)
at java.lang.reflect.Method.invoke(null)
at com.inductiveautomation.ignition.gateway.servlets.gateway.AbstractGatewayFunction.invoke(AbstractGatewayFunction.java:228)
at com.inductiveautomation.ignition.gateway.servlets.Gateway.doPost(Gateway.java:435)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:523)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:86)
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1410)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1384)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1306)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at com.inductiveautomation.catapult.handlers.RemoteHostNameLookupHandler.handle(RemoteHostNameLookupHandler.java:121)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:301)
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.Server.handle(Server.java:563)
at org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
at java.lang.Thread.run(null)

Ignition v8.1.47 (b2025022612)
Java: Azul Systems, Inc. 17.0.13

So still cannot access/restore Tag Browser…

You restored "disabled". Did you re-enable the default tag provider via the gateway web interface?

Ahhh - I did not realize the tag provider would be disabled. Ok so I’m guessing enabling this will solve my issue - I am just a little concerned that after I do so, things like tag event scripts, alarm notifications etc. will fire from my local machine - I may just disconnect my machine from the network before doing so. Thanks Phil!

Yes, this is a hazard. I think this is the single most important reason to never install Ignition in localhost. Always use virtual machines or containers. If you don't know how to do the latter, drop everything and learn it, immediately.

2 Likes