Megosztás a következőn keresztül:


Biztonságos szolgáltatás– kommunikáció áthelyezése Java-szolgáltatásban

A biztonság a kommunikáció egyik legfontosabb aspektusa. A Reliable Services alkalmazás keretrendszere néhány előre összeállított kommunikációs vermet és eszközt biztosít, amelyekkel javíthatja a biztonságot. Ez a cikk azt ismerteti, hogyan javíthatja a biztonságot, ha java-szolgáltatásbeli szolgáltatás-újraküldést használ. Egy meglévő példára épül, amely bemutatja, hogyan állíthat be újraírást a Java nyelven írt megbízható szolgáltatásokhoz.

Ha a Java-szolgáltatásokkal végzett szolgáltatás-újramotálást használja, a következő lépéseket kell követnie:

  1. Hozzon létre egy felületet, HelloWorldStatelessamely meghatározza a távoli eljáráshíváshoz elérhető metódusokat a szolgáltatásban. A szolgáltatás a csomagban microsoft.serviceFabric.services.remoting.fabricTransport.runtime deklaráltat fogja használniFabricTransportServiceRemotingListener. Ez egy CommunicationListener olyan implementáció, amely újraegyeztetési képességeket biztosít.

    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!");
        }
    }
    
  2. Adjon hozzá figyelőbeállításokat és biztonsági hitelesítő adatokat.

    Győződjön meg arról, hogy a szolgáltatás kommunikációjának biztonságossá tételéhez használni kívánt tanúsítvány telepítve van a fürt összes csomópontján. A Linuxon futó szolgáltatások esetében a tanúsítványnak PEM-formátumú fájlként kell rendelkezésre állnia; vagy a tanúsítványt .pem és a titkos kulcsot tartalmazó fájl, vagy a tanúsítványt .crt tartalmazó fájl és a .key titkos kulcsot tartalmazó fájl. További információ: X.509-tanúsítványok helye és formátuma Linux-csomópontokon.

    Kétféleképpen adhat meg figyelőbeállításokat és biztonsági hitelesítő adatokat:

    1. Adja meg őket egy konfigurációs csomag használatával:

      Adjon hozzá egy elnevezett TransportSettings szakaszt a settings.xml fájlban.

      <!--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>
      
      

      Ebben az esetben a metódus a createServiceInstanceListeners következőképpen fog kinézni:

       protected List<ServiceInstanceListener> createServiceInstanceListeners() {
           ArrayList<ServiceInstanceListener> listeners = new ArrayList<>();
           listeners.add(new ServiceInstanceListener((context) -> {
               return new FabricTransportServiceRemotingListener(context,this, FabricTransportRemotingListenerSettings.loadFrom(HelloWorldStatelessTransportSettings));
           }));
           return listeners;
       }
      

      Ha előtag nélkül ad hozzá egy szakaszt TransportSettings a settings.xml fájlhoz, FabricTransportListenerSettings alapértelmezés szerint betölti a szakasz összes beállítását.

      <!--"TransportSettings" section without any prefix.-->
      <Section Name="TransportSettings">
          ...
      </Section>
      

      Ebben az esetben a metódus a CreateServiceInstanceListeners következőképpen fog kinézni:

      protected List<ServiceInstanceListener> createServiceInstanceListeners() {
          ArrayList<ServiceInstanceListener> listeners = new ArrayList<>();
          listeners.add(new ServiceInstanceListener((context) -> {
              return new FabricTransportServiceRemotingListener(context,this);
          }));
          return listeners;
      }
      
  3. Ha metódusokat hív meg egy biztonságos szolgáltatáson az újraegyeztetési verem használatával, ahelyett, hogy az osztályt használva hoz létre szolgáltatásproxyt, használja a microsoft.serviceFabric.services.remoting.client.ServiceProxyBase következőt microsoft.serviceFabric.services.remoting.client.FabricServiceProxyFactory: .

    Ha az ügyfélkód egy szolgáltatás részeként fut, betöltheti FabricTransportSettings a settings.xml fájlból. Hozzon létre egy TransportSettings szakaszt, amely hasonló a szolgáltatáskódhoz, ahogy azt korábban is láthattuk. Végezze el a következő módosításokat az ügyfélkódon:

    
    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();