Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A segurança é um dos aspetos mais importantes da comunicação. A estrutura de aplicação Reliable Services fornece algumas pilhas de comunicação predefinidas e ferramentas que pode utilizar para melhorar a segurança. Este artigo discute como melhorar a segurança ao utilizar a remoção de serviço num serviço Java. Ele se baseia em um exemplo existente que explica como configurar a comunicação remota para serviços confiáveis escritos em Java.
Para ajudar a proteger um serviço quando você estiver usando a comunicação remota de serviço com serviços Java, siga estas etapas:
Crie uma interface,
HelloWorldStateless, que define os métodos que estarão disponíveis para uma chamada de procedimento remoto no seu serviço. Seu serviço usaráFabricTransportServiceRemotingListener, que é declarado nomicrosoft.serviceFabric.services.remoting.fabricTransport.runtimepacote. Esta é umaCommunicationListenerimplementação que fornece recursos de comunicação remota.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!"); } }Adicione configurações de ouvinte e credenciais de segurança.
Verifique se o certificado que você deseja usar para ajudar a proteger a comunicação de serviço está instalado em todos os nós do cluster. Para serviços executados no Linux, o certificado deve estar disponível como um arquivo formado em PEM; Um
.pemarquivo que contém o certificado e a chave privada ou um.crtarquivo que contém o certificado e um.keyarquivo que contém a chave privada. Para saber mais, consulte Localização e formato de certificados X.509 em nós Linux.Há duas maneiras de fornecer configurações de ouvinte e credenciais de segurança:
Forneça-os usando um pacote de configuração:
Adicione uma seção nomeada
TransportSettingsno arquivo 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>Nesse caso, o
createServiceInstanceListenersmétodo terá esta aparência:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this, FabricTransportRemotingListenerSettings.loadFrom(HelloWorldStatelessTransportSettings)); })); return listeners; }Se você adicionar uma
TransportSettingsseção no arquivo settings.xml sem qualquer prefixo,FabricTransportListenerSettingscarregará todas as configurações dessa seção por padrão.<!--"TransportSettings" section without any prefix.--> <Section Name="TransportSettings"> ... </Section>Nesse caso, o
CreateServiceInstanceListenersmétodo terá esta aparência:protected List<ServiceInstanceListener> createServiceInstanceListeners() { ArrayList<ServiceInstanceListener> listeners = new ArrayList<>(); listeners.add(new ServiceInstanceListener((context) -> { return new FabricTransportServiceRemotingListener(context,this); })); return listeners; }
Quando chamar métodos num serviço seguro usando a pilha de comunicação remota, em vez de utilizar a classe
microsoft.serviceFabric.services.remoting.client.ServiceProxyBasepara criar um proxy de serviço, usemicrosoft.serviceFabric.services.remoting.client.FabricServiceProxyFactory.Se o código do cliente estiver sendo executado como parte de um serviço, você poderá carregar
FabricTransportSettingsa partir do arquivo settings.xml. Crie uma seção TransportSettings semelhante ao código de serviço, conforme mostrado anteriormente. Faça as seguintes alterações no código do cliente: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();