Communication with System Connectors and Routers
Introduction
Each target system is connected to the CoreOne Suite with a system connector. This system connector acts as the bridge between the CoreOne Suite logic and the target system. In many cases, the system connector can be executed directly on one of the application server, as the target system is directly accessible from the application server. But there are many cases where there are technical limitations. To name a few:
The application server is part of a different Active Directory Domain than the target system
The target system is in a different network zone, that is not directly accessible
The connector needs to run in 32-bit as used libraries to connect to the system are only available in 32-bit
If such a case occurs, you will need to configure an additional system connector and in some cases one or more routers. Below is an example of such an architecutre.
Target Network Configuration
Whenever you are adding a target system to the CoreOne Suite configuration, you have to select a target network. That target network identifies in which target network the system is placed. In the example above, we have 5 target networks. Every target system in the “APP Network Zone” is connectable by the default “Local Network” target network, that’s automatically created. If you want to add a system to the “Target System Zone”, you have to add that to the list of target networks in the Admin UI.
When adding the target network, you will need to specify the following parameters.
Parameters
Property | Data Type | Mandatory | Example | Description |
---|---|---|---|---|
| String |
| Target System Zone | The name of the target network. This name will also be used in the router configuration. |
| String |
|
| The net:tcp address of the next hop. In the example above, the “Target System Zone” is not accessible directly from the “APP Network Zone” which is why we will specify the IP:Port of Router 1. |
| String |
|
| Static value. |
| String |
|
| Static value. |
| String |
|
| The last entry of the Subject Alternative Names of the certificate that should be used to prove the identity of the target server. Note:
|
Router Configuration
Each of the routers will take the incoming message, read the target network destination from the header, check the local configuration for the next hop, and forward the message to the next hop. It’s therefore necessary to add all the destination target networks and their next hop to the configuration file. Such configuration files are attached below.
Host configuration
First of all, we will configure the router itself. On line 22, we add the host
section, where we configure which URI
the router is listening to. In this case, it’s net.tcp://10.10.11.100:9001
which should match the Target URI
from the target network example above. This configuration also references the behavior SystemConnectorServiceBehaviours
which can be found on line 63. In that behavior configuration, we specify with the certificate that router 1 will encrypt its content. In this case, it’s Router1.SystemConnector.CoreOne.ITSENSE.local
certificate. Similar to the target network configuration we, therefore, have the following requirements:
The router service user has to have access to the private key of this certificate.
The calling party, in this case, the application service, has to have access to the public key of this certificate, in order to validate the message.
On line 23 we specify all the public certificates that we can use to verify a sender's message. In our case, only the application server will initiate the communication and we, therefore, add that public certificate (Client.SystemConnector.CoreOne.ITSENSE.local
) to the list. And we have the following requirements:
The router service user has to have access to the public key of this certificate.
Routing Configuration
On line 27 we can find our routing configuration. Here we have to add all target networks, with their next hop. In our Router 1 example we route all traffic destined for Default Network
to the next hop net.tcp://10.10.12.100:9002
. That destination has to match the configuration of Router 2, i.e. the Port and the certificate Router2.SystemConnector.CoreOne.ITSENSE.local
. So again we have the following requirements:
Router service 1 has to have access to the public key of the router 2 certificate, in order to validate the message.
This configuration also references the SystemConnectorEndpointBehaviours
found on line 53. Here again, we specify with which certificate router 1 will encrypt its content sent to the next hops. This is again the Router1.SystemConnector.CoreOne.ITSENSE.local
certificate. And we have the following requirements:
The router service user has to have access to the private key of this certificate.
The next hop and the application service, in this case, the Router 2 and the application service, have to have access to the public key of this certificate, in order to validate the message.
Configuration Examples
Router 1
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="serviceHostConfigGroup">
<section
name="hostConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Host.ServiceHostConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
<section
name="routingConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Target.TargetConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
</sectionGroup>
</configSections>
<serviceHostConfigGroup>
<hostConfig>
<host baseUri="net.tcp://10.10.11.100:9001" publishMetadata="false" bindingName="RouterBinding" serviceBehavioursName="SystemConnectorServiceBehaviours" includeExceptionDetailsInFaults="true" />
<hostX509ClientListCertificateValidator>
<clientCertificate findValue="Client.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</hostX509ClientListCertificateValidator>
</hostConfig>
<routingConfig>
<targets>
<target targetName="Default Network" targetUri="net.tcp://10.10.12.100:9002" bindingName="SystemConnectorBinding" endpointBehavioursName="SystemConnectorEndpointBehaviours" endpointDnsIdentity="Router2.SystemConnector.CoreOne.ITSENSE.local" />
</targets>
</routingConfig>
</serviceHostConfigGroup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="RouterBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
<binding name="SystemConnectorBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="SystemConnectorEndpointBehaviours">
<clientCredentials>
<clientCertificate findValue="Router1.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
<serviceCertificate>
<authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="SystemConnectorServiceBehaviours">
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="iTsense.Moving.Backend.SystemConnector.Runner.Security.HostX509ClientListCertificateValidator, iTsense.Moving.Backend.SystemConnector.Runner"/>
</clientCertificate>
<serviceCertificate findValue="Router1.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Router 2
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="serviceHostConfigGroup">
<section
name="hostConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Host.ServiceHostConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
<section
name="routingConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Target.TargetConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
</sectionGroup>
</configSections>
<serviceHostConfigGroup>
<hostConfig>
<host baseUri="net.tcp://10.10.12.100:9002" publishMetadata="false" bindingName="RouterBinding" serviceBehavioursName="SystemConnectorServiceBehaviours" includeExceptionDetailsInFaults="true" />
<hostX509ClientListCertificateValidator>
<clientCertificate findValue="Router1.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</hostX509ClientListCertificateValidator>
</hostConfig>
<routingConfig>
<targets>
<target targetName="Default Network" targetUri="net.tcp://localh10.10.13.100ost:9003" bindingName="SystemConnectorBinding" endpointBehavioursName="SystemConnectorEndpointBehaviours" endpointDnsIdentity="Router3.SystemConnector.CoreOne.ITSENSE.local" />
</targets>
</routingConfig>
</serviceHostConfigGroup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="RouterBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
<binding name="SystemConnectorBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="SystemConnectorEndpointBehaviours">
<clientCredentials>
<clientCertificate findValue="Router2.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
<serviceCertificate>
<authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="SystemConnectorServiceBehaviours">
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="iTsense.Moving.Backend.SystemConnector.Runner.Security.HostX509ClientListCertificateValidator, iTsense.Moving.Backend.SystemConnector.Runner"/>
</clientCertificate>
<serviceCertificate findValue="Router2.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Router 3
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="serviceHostConfigGroup">
<section
name="hostConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Host.ServiceHostConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
<section
name="routingConfig"
type="iTsense.Moving.Backend.SystemConnector.Runner.Configuration.Target.TargetConfigurationSection,iTsense.Moving.Backend.SystemConnector.Runner"
allowLocation="true"
allowDefinition="Everywhere"
/>
</sectionGroup>
</configSections>
<serviceHostConfigGroup>
<hostConfig>
<host baseUri="net.tcp://10.10.13.100:9003" publishMetadata="false" bindingName="RouterBinding" serviceBehavioursName="SystemConnectorServiceBehaviours" includeExceptionDetailsInFaults="true" />
<hostX509ClientListCertificateValidator>
<clientCertificate findValue="Router2.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</hostX509ClientListCertificateValidator>
</hostConfig>
<routingConfig>
<targets>
<target targetName="Default Network" targetUri="net.tcp://10.10.14.100:9000" bindingName="SystemConnectorBinding" endpointBehavioursName="SystemConnectorEndpointBehaviours" endpointDnsIdentity="Host.SystemConnector.CoreOne.ITSENSE.local" >
<validators>
<validator type="iTsense.Moving.Backend.SystemConnector.Router.MessageValidator.Simulator.ValidatorSimulator, iTsense.Moving.Backend.SystemConnector.Router" processRequests="true" processResponses="true" />
</validators>
</target>
</targets>
</routingConfig>
</serviceHostConfigGroup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="RouterBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
<binding name="SystemConnectorBinding" transferMode="Streamed">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="SystemConnectorEndpointBehaviours">
<clientCredentials>
<clientCertificate findValue="Router3.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
<serviceCertificate>
<authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="SystemConnectorServiceBehaviours">
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="iTsense.Moving.Backend.SystemConnector.Runner.Security.HostX509ClientListCertificateValidator, iTsense.Moving.Backend.SystemConnector.Runner"/>
</clientCertificate>
<serviceCertificate findValue="Router3.SystemConnector.CoreOne.ITSENSE.local" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
System Connector (Host)
© ITSENSE AG. Alle Rechte vorbehalten. ITSENSE und CoreOne sind eingetragene Marken der ITSENSE AG.