Säker fjärrkommunikation för tjänster i en Java-tjänst
Säkerhet är en av de viktigaste aspekterna av kommunikationen. Reliable Services-programramverket innehåller några fördefinierade kommunikationsstackar och verktyg som du kan använda för att förbättra säkerheten. Den här artikeln beskriver hur du kan förbättra säkerheten när du använder tjänstmoting i en Java-tjänst. Det bygger på ett befintligt exempel som förklarar hur du konfigurerar fjärrkommunikation för tillförlitliga tjänster som skrivits i Java.
Följ dessa steg för att skydda en tjänst när du använder tjänstkommunikation med Java-tjänster:
Skapa ett gränssnitt,
HelloWorldStateless
, som definierar de metoder som ska vara tillgängliga för ett fjärrproceduranrop i tjänsten. Tjänsten använderFabricTransportServiceRemotingListener
, som deklareras imicrosoft.serviceFabric.services.remoting.fabricTransport.runtime
paketet. Det här är enCommunicationListener
implementering som tillhandahåller fjärrkommunikationsfunktioner.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!"); } }
Lägg till lyssnarinställningar och säkerhetsautentiseringsuppgifter.
Kontrollera att certifikatet som du vill använda för att skydda din tjänstkommunikation är installerat på alla noder i klustret. För tjänster som körs på Linux måste certifikatet vara tillgängligt som en PEM-formmatad fil. antingen en
.pem
fil som innehåller certifikatet och den privata nyckeln eller en.crt
fil som innehåller certifikatet och en.key
fil som innehåller den privata nyckeln. Mer information finns i Plats och format för X.509-certifikat på Linux-noder.Du kan ange lyssnarinställningar och säkerhetsautentiseringsuppgifter på två sätt:
Ange dem med hjälp av ett konfigurationspaket:
Lägg till ett namngivet
TransportSettings
avsnitt i settings.xml-filen.<!--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>
I det här fallet
createServiceInstanceListeners
ser metoden ut så här:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this, FabricTransportRemotingListenerSettings.loadFrom(HelloWorldStatelessTransportSettings)); })); return listeners; }
Om du lägger till ett
TransportSettings
avsnitt i settings.xml-filen utan prefix läserFabricTransportListenerSettings
du in alla inställningar från det här avsnittet som standard.<!--"TransportSettings" section without any prefix.--> <Section Name="TransportSettings"> ... </Section>
I det här fallet
CreateServiceInstanceListeners
ser metoden ut så här:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this); })); return listeners; }
När du anropar metoder för en skyddad tjänst med hjälp av fjärrkommunikationsstacken använder
microsoft.serviceFabric.services.remoting.client.FabricServiceProxyFactory
du i stället för att användamicrosoft.serviceFabric.services.remoting.client.ServiceProxyBase
klassen för att skapa en tjänstproxy .Om klientkoden körs som en del av en tjänst kan du läsa in
FabricTransportSettings
från settings.xml-filen. Skapa ett TransportSettings-avsnitt som liknar tjänstkoden, som du visade tidigare. Gör följande ändringar i klientkoden: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();
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för