Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Säkerhet är en av de viktigaste aspekterna av kommunikation. 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 diskuterar hur du kan förbättra säkerheten när du använder service-remoting i en Java-tjänst. Den 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änstmoting 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.runtimepaketet. Det här är enCommunicationListenerimplementering som tillhandahåller fjärrfunktioner.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 tjänstkommunikationen ä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-formmaterad fil. antingen en
.pemfil som innehåller certifikatet och den privata nyckeln eller en.crtfil som innehåller certifikatet och en.keyfil som innehåller den privata nyckeln. Mer information finns i Plats och format för X.509-certifikat på Linux-noder.Du kan ange lyssningsinställningar och säkerhetsautentiseringsuppgifter på två sätt:
Ange dem med hjälp av ett konfigurationspaket:
Lägg till ett namngivet
TransportSettingsavsnitt i filen settings.xml.<!--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/AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00.crt" /> <Parameter Name="CertificateProtectionLevel" Value="EncryptandSign" /> <Parameter Name="CertificateRemoteThumbprints" Value="AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00" /> </Section>I det här fallet
createServiceInstanceListenersser 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
TransportSettingsavsnitt i filen settings.xml utan prefixFabricTransportListenerSettingsläser 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
CreateServiceInstanceListenersser 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 på en säker tjänst med hjälp av fjärrkommunikationsstacken, använd
microsoft.serviceFabric.services.remoting.client.ServiceProxyBaseistället för att användamicrosoft.serviceFabric.services.remoting.client.FabricServiceProxyFactory-klassen för att skapa en tjänstproxy.Om klientkoden körs som en del av en tjänst kan du läsa in
FabricTransportSettingsfrån settings.xml-filen. Skapa ett TransportSettings-avsnitt som liknar tjänstkoden, som visat 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();