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:
Hozzon létre egy felületet,
HelloWorldStateless
amely meghatározza a távoli eljáráshíváshoz elérhető metódusokat a szolgáltatásban. A szolgáltatás a csomagbanmicrosoft.serviceFabric.services.remoting.fabricTransport.runtime
deklaráltat fogja használniFabricTransportServiceRemotingListener
. Ez egyCommunicationListener
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!"); } }
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:
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; }
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őtmicrosoft.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();