Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 OPCUA Protocol Handler Flow:


OPCUA Protocol Handler Installation: 


Date
Download Location
Version
4/11/2018Download1.1.1
7/17/2020Download2.0.0


OPCUA Setup Instructions

  1. Unzip the downloaded zip file
  2. Copy the sff.bundle.ext.opc.jar from this location to the sff.auto.launch folder which is present in your A-Stack Prime folder.


OPCUA Protocol Parameters:

The table below lists all the parameters of opcua protocol handler and their description

...

  • Opcua Write:

    Code Block
    languagexml
    titleOpcua Write Facet
    linenumberstrue
    <ThingFacet Name="OPCWriteFacet">
      <String KnownBy="OPCWriteAction" Name="OpcData"/>
      <String Name="NodeID"/>
      <String Name="Operation"/>
      <Integer Name="AttribueID"/>
      <ConnectionConfig Name="OPCSubscribeConnectionConfig"/>
      <Action Name="OPCWriteAction">
        <Workflow Limit="1" Live="1" Timeout="-1">
          <Task name="Main">
            <Event as="ActionArgument" name="Argument"/>
            <Invoke name="InvokeOPCWrite" post="opcua://?ServerUri=[%:Event.Argument.OPCSubscribeConnectionConfig.ServerUri.Value:%]&amp;
    			SecurityMode=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityMode.Value:%]&amp;
    			UserName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.UserName.Value:%]&amp;
    			Password=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.Password.Value:%]&amp;
    			Path=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]&amp;
    			ValidityInDay=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]&amp;
    			AutoCertificateRenewal=
    			[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]&amp;
            	PrivateKeyPwd=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]&amp;
            	OrgName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]&amp;
                KeySize=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]&amp;
                AppUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]&amp; 
                AppName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]&amp;                             
    			ProductUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]&amp;
                Operation=[%:Event.Argument.Operation.Value:%]" scope="local" waitFor="Argument">
              <Message>
                <Value>
                  <Payload>
                        [%:Event.Argument.OpcData.Value:%]
                  </Payload>
                  <NodeID>
                      [%:Event.Argument.NodeID.Value:%]
                  </NodeID>
                  <AttributeID>
                      [%:Event.Argument.AttributeID.Value:%]
                  </AttributeID>
                </Value>
              </Message>
            </Invoke>
            <Output As="ActionResult" Name="Result">
              <Value>
                <OpcData>
                  <Include>
    				Invoke.InvokeOPCWrite.Message.Value
                  </Include>
                </OpcData>
              </Value>
            </Output>
          </Task>
        </Workflow>
      </Action>
    </ThingFacet>


    Code Block
    languagexml
    titlewrite Initialization Query
    linenumberstrue
     <Query>
        <DeleteAll>
            <OPCWriteModel>
                <writeId ne=""/>
            </OPCWriteModel>
        </DeleteAll>
        <Create>
            <OPCWriteModel>
                <Operation>
                    write
                </Operation>
                <NodeID>
                    ns=2;s=Atomiton.Device1.TankData.USSAV1S01HST.Tank1.Tank_1_FCU_Temperature
                </NodeID>
                <AttributeID>
                    $Null()
                </AttributeID>
                <OPCSubscribeConnectionConfig>
                    <ServerUri>
                        opc.tcp://MSEDGEWIN10:49320
                    </ServerUri>
                    <SecurityMode>
                        0
                    </SecurityMode>
                    <SecurityOptions>
                        <UserName/>
                        <Password/>
                        <ApplicationIdentity>
                            <AppName>
                                atomitonClient@localhost
                            </AppName>
                            <AppUri>
                                urn:localhost:OPCUATQL
                            </AppUri>
                            <ProductUri>
                                urn:atomiton.com:OPCUA
                            </ProductUri>
                        </ApplicationIdentity>
                        <CertificationParameters>
                            <OrgName>
                                atomiton
                            </OrgName>
                            <Path>
                                /atomiton/certs
                            </Path>
                            <PrivateKeyPwd>
                                tql123#
                            </PrivateKeyPwd>
                            <ValidityInDay>
                                3650
                            </ValidityInDay>
                            <AutoCertificateRenewal>
                                true
                            </AutoCertificateRenewal>
                            <KeySize>
                                2048
                            </KeySize>
                        </CertificationParameters>
                    </SecurityOptions>
                </OPCSubscribeConnectionConfig>
                <OpcData>
                    80
                </OpcData>
            </OPCWriteModel>
        </Create>
    </Query>
    


    Code Block
    languagexml
    titleWrite Update query
    linenumberstrue
    <Query>
      <Find format="version,known">
        <OPCWriteModel>
          <writeId ne=""/>
        </OPCWriteModel>
      </Find>
      <if condition="$Response.Message.Value/Find/Status eq 'Success'">
        <then>
          <SetResponseData>
            <key>
              Message.Value.Find.Result.OPCWriteModel.OpcData.Value
            </key>
            <value>
              200
            </value>
          </SetResponseData>
          <Update>
            <from>
              Result
            </from>
            <Include>
              $Response.Message.Value.Find
            </Include>
          </Update>
        </then>
      </if>
    </Query>


  • Opcua Subscription:

    Code Block
    languagexml
    titleOpcua Subscription Facet
    linenumberstrue
    	<Def Name="CertificationParams">
          <String Name="OrgName"/>
          <String Name="Path"/>
          <String Name="PrivateKeyPwd"/>
          <String Name="ValidityInDay"/>
          <String Name="AutoCertificateRenewal"/>
          <Integer Name="KeySize"/>
        </Def>
        <Def Name="AppIdentity">
          <String Name="AppName"/>
          <String Name="AppUri"/>
          <String Name="ProductUri"/>
        </Def>
        <Def Name="SecurityConfig">
          <String Name="UserName"/>
          <String Name="Password"/>
          <AppIdentity Name="ApplicationIdentity"/>
          <CertificationParams Name="CertificationParameters"/>
        </Def>
        <Def Name="ConnectionConfig">
          <String Name="ServerUri"/>
          <Integer Name="SecurityMode"/>
          <SecurityConfig Name="SecurityOptions"/>
        </Def>
    	<Def Name="OPCUaSubscribe">
    		<String Name="NodeID" Cardinality="0..m"/>
            <String Name="AttributeID"/>
            <String Name="SubscribeChild"/>
            <String Name="PublishingInterval"/>
            <String Name="NotificationBufferSize"/>
    	</Def>
    
    	<ThingFacet Name="OPCSubscriberFacet">
      		<String Format="$ObjectFormat(xml)" KnownBy="OPCSubscriberAction" Name="SubscriptionData" update="auto"/>
      		<String Name="Operation"/>
      		<ConnectionConfig Name="OPCSubscribeConnectionConfig"/>
      		<OPCUaSubscribe Name="OPCSubscriptionConfig"/>
      		<Action Name="OPCSubscriberAction">
        	<Workflow Limit="1" Live="1" Timeout="-1">
          		<Task name="Main" while="true">
            		<Event as="ActionArgument" name="Argument"/>
            			<Invoke name="InvokeOPCSubscription" post="opcua://?ServerUri=[%:Event.Argument.OPCSubscribeConnectionConfig.ServerUri.Value:%]&amp;
                         SecurityMode=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityMode.Value:%]&amp;
                         UserName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.UserName.Value:%]&amp;
    					 Password=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.Password.Value:%]&amp;
    					 Path=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]&amp;
            			 ValidityInDay=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]&amp;
    					 AutoCertificateRenewal=	 
    						[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]&amp;
            			 PrivateKeyPwd=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]&amp;
            			 OrgName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]&amp;
                         KeySize=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]&amp;
                         AppUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]&amp;
                         AppName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]&amp;
    					 ProductUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]&amp;
                         Operation=[%:Event.Argument.Operation.Value:%]" scope="process" waitFor="Argument">
              			 <Message>
                			<Value>
                  				<OPCSubscriptionConfig>
                      				[:Event.Argument.OPCSubscriptionConfig:]
                  				</OPCSubscriptionConfig>
                		  	</Value>
              			</Message>
            		   </Invoke>
            		   <Output As="ActionResult" Name="Result">
              			<Value>
                			<SubscriptionData>
                  				<Include>
                      				Invoke.InvokeOPCSubscription.Message.Value
                  				</Include>
                			</SubscriptionData>
              			</Value>
            		   </Output>
          		</Task>
        	</Workflow>
     	 </Action>
    	</ThingFacet>


    Code Block
    languagexml
    titleSubscription Initialization Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCSubscriberModel>
          <subscribeId ne=""/>
        </OPCSubscriberModel>
      </DeleteAll>
      <Create>
        <OPCSubscriberModel>
          <Operation>
            subscription
          </Operation>
          <OPCSubscribeConnectionConfig>
            <ServerUri>
              opc.tcp://MSEDGEWIN10:49320
            </ServerUri>
            <SecurityMode>
              2
            </SecurityMode>
            <SecurityOptions>
              <UserName/>
              <Password/>
              <ApplicationIdentity>
                <AppName>
                  atomitonClient@localhost
                </AppName>
                <AppUri>
                  urn:localhost:OPCUATQL
                </AppUri>
                <ProductUri>
                  urn:atomiton.com:OPCUA
                </ProductUri>
              </ApplicationIdentity>
              <CertificationParameters>
                <OrgName>
                  atomiton
                </OrgName>
                <Path>/atomiton/certs</Path>
                <PrivateKeyPwd>
                  tql123#
                </PrivateKeyPwd>
                <ValidityInDay>
                  3650
                </ValidityInDay>
                <AutoCertificateRenewal>
                  true
                </AutoCertificateRenewal>
                <KeySize>
                  2048
                </KeySize>
              </CertificationParameters>
            </SecurityOptions>
          </OPCSubscribeConnectionConfig>
          <OPCSubscriptionConfig>
             <NodeID>
              	ns=2;s=VopakAtomiton.OilAndGas.Test.Device1.TankData.USSAV1S01HSTTest.Tank1
            </NodeID>
            <NodeID>
              	ns=2;s=VopakAtomiton.OilAndGas.Test.Device1.TankData.USSAV1S01HSTTest.Tank2
            </NodeID>
            <AttributeID/>
            <PublishingInterval>1000</PublishingInterval>
            <NotificationBufferSize>5000</NotificationBufferSize>
            <SubscribeChild>
              true
            </SubscribeChild>
          </OPCSubscriptionConfig>
          <SubscriptionData>$Null()</SubscriptionData>
          <SubscriptionPayload>$Null()</SubscriptionPayload>
        </OPCSubscriberModel>
      </Create>
    </Query>
    


    Code Block
    languagexml
    titleSubscription Deletion Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCSubscriberModel>
          <subscribeId ne=""/>
        </OPCSubscriberModel>
      </DeleteAll>
    </Query>


  • Note: It is possible to subscribe to multiple root nodes using a single facet, use multiple Node ID's as shown in above subscription query

    Code Block
    languagexml
    titleMultiple topics subscription
    linenumberstrue
    		 <NodeID>
              	ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1
            </NodeID>
            <NodeID>
              	ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2
            </NodeID>

     

...


Code Block
languagexml
titleXml Output Format
linenumberstrue
  <SubscriptionData Value="" Version="1">
    <Known>
        <OpcUaNodes>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_Agitator_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_FCU_Temperature</NodeID>
                <NodeValue>999.0</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Float</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_Gallon_Value</NodeID>
                <NodeValue>1.34547004E15</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Double</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_Loading_PP_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_RAW_Level_Inches</NodeID>
                <NodeValue>500.0</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Double</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_steaming_in_auto_selected_HMI</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1.Tank_1_unld_PP_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_Agitator_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_FCU_Temperature</NodeID>
                <NodeValue>56.0</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Float</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_Gallon_Value</NodeID>
                <NodeValue>1.34547004E15</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Double</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_Loading_PP_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_RAW_Level_Inches</NodeID>
                <NodeValue>34.6</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Double</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_steaming_in_auto_selected_HMI</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
            <OpcUaNode>
                <ServerTimeStamp/>
                <NodeID>ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank2.Tank_2_unld_PP_Motor_Running_Bit</NodeID>
                <NodeValue>false</NodeValue>
                <StatusCode>GOOD</StatusCode>
                <SourceTimeStamp>03/07/17 19:53:39.8876995 GMT</SourceTimeStamp>
                <DataType>Boolean</DataType>
            </OpcUaNode>
        </OpcUaNodes>
    </Known>
</SubscriptionData>



    

Kepserver certificate setup steps:

  • Open the Kepserver  Configuration Manager, by right clicking on kepserver icon in the task-bar and then clicking on OPC UA Configuration.Image Added


  • Note down the security mode used by the Kepserver, this is one of the important query parameter.


Image Added


  • When the security mode is not None, the subscription or publish will fail for the first time, with the below message, this is expected behavior as the certificates are not updated in Kepserver.


Code Block
titleOPCUA Error
Caused by: com.prosysopc.ua.client.ServerConnectionException: Server not connected: opc.tcp://MSEDGEWIN10:49320 [http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15,SignAndEncrypt]
              at com.prosysopc.ua.client.UaClient.E(Unknown Source)
              at com.prosysopc.ua.client.AddressSpace.browse(Unknown Source)
              at com.prosysopc.ua.client.AddressSpace.browse(Unknown Source)
              at com.prosysopc.ua.client.AddressSpace.browse(Unknown Source)
              at com.atomiton.sff.imp.netty.opc.client.OPCUaClient.subscribeToAllChildNodes(OPCUaClient.java:237)
              at com.atomiton.sff.imp.netty.opc.OpcHandlerImpl.CreateSubscription(OpcHandlerImpl.java:194)
              at com.atomiton.sff.imp.netty.opc.SffOpcHandler.connect(SffOpcHandler.java:399)
              at com.atomiton.sff.imp.netty.opc.SffOpcHandler.afterAdd(SffOpcHandler.java:103)
              at org.jboss.netty.channel.DefaultChannelPipeline.callAfterAdd(DefaultChannelPipeline.java:342)
              at org.jboss.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:108)
              at com.atomiton.sff.imp.netty.NettyContext.addPipelineHandler(NettyContext.java:4950)
              at com.atomiton.sff.imp.netty.NettyContext.addLast(NettyContext.java:5008)
              at com.atomiton.sff.imp.netty.NettyContext.modifyPipeline(NettyContext.java:4672)
              at com.atomiton.sff.imp.netty.NettyContext.newModifiedPipeline(NettyContext.java:4793)
              at com.atomiton.sff.imp.netty.NettyContext.newInstance(NettyContext.java:4414)
              at com.atomiton.sff.imp.facet.SffWdlFacet.wdlInvokeConnect(SffWdlFacet.java:1226)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at oda.concurrent.imp.MethodSignature.invoke(MethodSignature.java:446)
              at oda.concurrent.dataflow.imp.DfTask.call(DfTask.java:1352)
              at oda.concurrent.dataflow.imp.DfTask.delegate(DfTask.java:1374)
              at com.atomiton.sff.imp.facet.SffWdlFacet.wdlInvoke(SffWdlFacet.java:1103)
              at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at oda.concurrent.imp.MethodSignature.invoke(MethodSignature.java:446)
              at oda.concurrent.dataflow.imp.DfTask.call(DfTask.java:1297)
              at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
              at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
              at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
              at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
              at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)


  • The A-stack will generate the certificate files in the path "PKI/CA/{path provided in the query}" for example when we use above query, the certificates are saved in "PKI/CA/atomiton/certs" folder.

Image Added

  • Copy these certificates on to the machine that is running the Kepserver, and import these certificates in Trusted Clients tab of configuration manager.

Image Added

  • Go to the Run time tab of Kepserver and then reinitialize the server for the new settings to take place.

Image Added

  • Restart the subscription in AStack and it should start working this time.


Troubleshooting:

  1. If we are still getting server not connected error even after certificates are imported and connectivity between the system running AStack and system running Kepserver is validated, then it might be firewall issues, try adding exceptions in firewall and test.