Zabezpečená komunikace vzdálené komunikace služby ve službě Java
Zabezpečení je jedním z nejdůležitějších aspektů komunikace. Aplikační architektura Reliable Services poskytuje několik předem připravených komunikačních zásobníků a nástrojů, které můžete použít ke zlepšení zabezpečení. Tento článek popisuje, jak zlepšit zabezpečení při používání vzdálené komunikace služby ve službě Java. Vychází z existujícího příkladu , který vysvětluje, jak nastavit vzdálenou komunikace pro spolehlivé služby napsané v Javě.
Pokud chcete pomoct zabezpečit službu při používání vzdálené komunikace služby se službami Java, postupujte takto:
Vytvořte rozhraní,
HelloWorldStateless
které definuje metody, které budou k dispozici pro vzdálené volání procedury ve vaší službě. Vaše služba bude používatFabricTransportServiceRemotingListener
, která je deklarována vmicrosoft.serviceFabric.services.remoting.fabricTransport.runtime
balíčku. Jedná se oCommunicationListener
implementaci, která poskytuje možnosti vzdálené komunikace.public interface HelloWorldStateless extends Service { CompletableFuture<String> getHelloWorld(); } class HelloWorldStatelessImpl extends StatelessService implements HelloWorldStateless { @Override protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this); })); return listeners; } public CompletableFuture<String> getHelloWorld() { return CompletableFuture.completedFuture("Hello World!"); } }
Přidejte nastavení naslouchacího procesu a přihlašovací údaje zabezpečení.
Ujistěte se, že certifikát, který chcete použít k zabezpečení komunikace služby, je nainstalovaný na všech uzlech v clusteru. Pro služby spuštěné v Linuxu musí být certifikát dostupný jako soubor s formátem PEM;
.pem
buď soubor obsahující certifikát a privátní klíč, nebo.crt
soubor obsahující certifikát a.key
soubor, který obsahuje privátní klíč. Další informace najdete v tématu Umístění a formát certifikátů X.509 v uzlech Linuxu.Existují dva způsoby, jak zadat nastavení naslouchacího procesu a přihlašovací údaje zabezpečení:
Zadejte je pomocí konfiguračního balíčku:
Do souboru settings.xml přidejte pojmenovaný
TransportSettings
oddíl.<!--Section name should always end with "TransportSettings".--> <!--Here we are using a prefix "HelloWorldStateless".--> <Section Name="HelloWorldStatelessTransportSettings"> <Parameter Name="MaxMessageSize" Value="10000000" /> <Parameter Name="SecurityCredentialsType" Value="X509_2" /> <Parameter Name="CertificatePath" Value="/path/to/cert/BD1C71E248B8C6834C151174DECDBDC02DE1D954.crt" /> <Parameter Name="CertificateProtectionLevel" Value="EncryptandSign" /> <Parameter Name="CertificateRemoteThumbprints" Value="BD1C71E248B8C6834C151174DECDBDC02DE1D954" /> </Section>
V tomto případě
createServiceInstanceListeners
bude metoda vypadat takto:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this, FabricTransportRemotingListenerSettings.loadFrom(HelloWorldStatelessTransportSettings)); })); return listeners; }
Pokud do souboru settings.xml přidáte
TransportSettings
oddíl bez předpony,FabricTransportListenerSettings
načte ve výchozím nastavení všechna nastavení z tohoto oddílu.<!--"TransportSettings" section without any prefix.--> <Section Name="TransportSettings"> ... </Section>
V tomto případě
CreateServiceInstanceListeners
bude metoda vypadat takto:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this); })); return listeners; }
Při volání metod v zabezpečené službě pomocí zásobníku vzdálené komunikace místo třídy
microsoft.serviceFabric.services.remoting.client.ServiceProxyBase
k vytvoření proxy služby použijtemicrosoft.serviceFabric.services.remoting.client.FabricServiceProxyFactory
.Pokud je klientský kód spuštěný jako součást služby, můžete načíst
FabricTransportSettings
ze souboru settings.xml. Vytvořte část TransportSettings, která se podobá kódu služby, jak je znázorněno výše. V kódu klienta proveďte následující změny:FabricServiceProxyFactory serviceProxyFactory = new FabricServiceProxyFactory(c -> { return new FabricTransportServiceRemotingClientFactory(FabricTransportRemotingSettings.loadFrom("TransportPrefixTransportSettings"), null, null, null, null); }, null) HelloWorldStateless client = serviceProxyFactory.createServiceProxy(HelloWorldStateless.class, new URI("fabric:/MyApplication/MyHelloWorldService")); CompletableFuture<String> message = client.getHelloWorld();