Certificaten en beveiliging op Linux-clusters

Dit artikel bevat informatie over het configureren van X.509-certificaten op Linux-clusters.

Locatie en indeling van X.509-certificaten op Linux-knooppunten

Service Fabric verwacht over het algemeen dat X.509-certificaten aanwezig zijn in de map /var/lib/sfcerts op Linux-clusterknooppunten. Dit geldt voor clustercertificaten, clientcertificaten, enzovoort. In sommige gevallen kunt u een andere locatie dan de map var/lib/sfcerts voor certificaten opgeven. Als Reliable Services bijvoorbeeld is gebouwd met behulp van de Service Fabric Java SDK, kunt u een andere locatie opgeven via het configuratiepakket (Settings.xml) voor sommige toepassingsspecifieke certificaten. Zie Certificaten waarnaar wordt verwezen in het configuratiepakket (Settings.xml) voor meer informatie.

Voor Linux-clusters verwacht Service Fabric dat certificaten aanwezig zijn als een PEM-bestand dat zowel het certificaat als de persoonlijke sleutel bevat, of als een CRT-bestand dat het certificaat en een .key-bestand met de persoonlijke sleutel bevat. Alle bestanden moeten de PEM-indeling hebben.

Als u uw certificaat vanuit Azure Key Vault installeert met behulp van een Resource Manager sjabloon of PowerShell-opdrachten, wordt het certificaat in de juiste indeling geïnstalleerd in de map /var/lib/sfcerts op elk knooppunt. Als u een certificaat installeert via een andere methode, moet u ervoor zorgen dat het certificaat correct is geïnstalleerd op clusterknooppunten.

Certificaten waarnaar wordt verwezen in het toepassingsmanifest

Certificaten die zijn opgegeven in het toepassingsmanifest, bijvoorbeeld via de elementen SecretsCertificate of EndpointCertificate , moeten aanwezig zijn in de map /var/lib/sfcerts . De elementen die worden gebruikt om certificaten in het toepassingsmanifest op te geven, hebben geen padkenmerk, dus de certificaten moeten aanwezig zijn in de standaardmap. Deze elementen hebben een optioneel X509StoreName-kenmerk . De standaardwaarde is 'Mijn', wat verwijst naar de map /var/lib/sfcerts op Linux-knooppunten. Andere waarden zijn niet gedefinieerd in een Linux-cluster. We raden u aan het kenmerk X509StoreName weg te laten voor apps die worden uitgevoerd op Linux-clusters.

Certificaten waarnaar wordt verwezen in het configuratiepakket (Settings.xml)

Voor sommige services kunt u X.509-certificaten configureren in het ConfigPackage (standaard Settings.xml). Dit is bijvoorbeeld het geval wanneer u certificaten declareert die worden gebruikt voor het beveiligen van RPC-kanalen voor Reliable Services-services die zijn gebouwd met de Service Fabric .NET Core- of Java SDK's. Er zijn twee manieren om te verwijzen naar certificaten in het configuratiepakket. Ondersteuning varieert tussen de .NET Core- en Java-SDK's.

X509 SecurityCredentialsType gebruiken

Met de .NET- of Java-SDK's kunt u X509 opgeven voor het SecurityCredentialsType. Dit komt overeen met het X509Credentials (.NET/Java)-type (SecurityCredentials.NET/Java).

De X509-verwijzing zoekt het certificaat in een certificaatarchief. De volgende XML toont de parameters die worden gebruikt om de locatie van het certificaat op te geven:

    <Parameter Name="SecurityCredentialsType" Value="X509" />
    <Parameter Name="CertificateStoreLocation" Value="LocalMachine" />
    <Parameter Name="CertificateStoreName" Value="My" />

Voor een service die wordt uitgevoerd op Linux, verwijst LocalMachine/My naar de standaardlocatie voor certificaten, de map /var/lib/sfcerts . Voor Linux zijn andere combinaties van CertificateStoreLocation en CertificateStoreName niet gedefinieerd.

Geef altijd LocalMachine op voor de parameter CertificateStoreLocation . U hoeft de parameter CertificateStoreName niet op te geven, omdat deze standaard is ingesteld op 'Mijn'. Met een X509-verwijzing moeten de certificaatbestanden zich bevinden in de map /var/lib/sfcerts op het clusterknooppunt.

In de volgende XML ziet u een sectie TransportSettings op basis van deze stijl:

<Section Name="HelloWorldStatefulTransportSettings">
    <Parameter Name="MaxMessageSize" Value="10000000" />
    <Parameter Name="SecurityCredentialsType" Value="X509" />
    <Parameter Name="CertificateFindType" Value="FindByThumbprint" />
    <Parameter Name="CertificateFindValue" Value="4FEF3950642138446CC364A396E1E881DB76B48C" />
    <Parameter Name="CertificateRemoteThumbprints" Value="9FEF3950642138446CC364A396E1E881DB76B483" />
    <Parameter Name="CertificateStoreLocation" Value="LocalMachine" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptAndSign" />
    <Parameter Name="CertificateRemoteCommonNames" Value="ServiceFabric-Test-Cert" />
</Section>

X509_2 SecurityCredentialsType gebruiken

Met de Java SDK kunt u X509_2 opgeven voor het Type SecurityCredentials. Dit komt overeen met het X509Credentials2 type (Java) van SecurityCredentials (Java).

Met een X509_2 verwijzing geeft u een padparameter op, zodat u het certificaat kunt vinden in een andere map dan /var/lib/sfcerts. De volgende XML toont de parameters die worden gebruikt om de locatie van het certificaat op te geven:

     <Parameter Name="SecurityCredentialsType" Value="X509_2" />
     <Parameter Name="CertificatePath" Value="/path/to/cert/BD1C71E248B8C6834C151174DECDBDC02DE1D954.crt" />

In de volgende XML ziet u een sectie TransportSettings op basis van deze stijl.

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

Notitie

Het certificaat is opgegeven als een CRT-bestand in de voorgaande XML. Dit betekent dat er ook een .key-bestand met de persoonlijke sleutel op dezelfde locatie is.

Een Reliable Services-app configureren voor uitvoering op Linux-clusters

Met de Service Fabric SDK's kunt u communiceren met de Service Fabric-runtime-API's om gebruik te maken van het platform. Wanneer u een toepassing uitvoert die gebruikmaakt van deze functionaliteit op beveiligde Linux-clusters, moet u uw toepassing configureren met een certificaat dat kan worden gebruikt om te valideren met de Service Fabric-runtime. Voor toepassingen die Service Fabric Reliable Service-services bevatten die zijn geschreven met behulp van de .NET Core- of Java-SDK's, is deze configuratie vereist.

Als u een toepassing wilt configureren, voegt u een SecretsCertificate-element toe onder de tag Certificaten . Dit bevindt zich onder de tag ApplicationManifest in het ApplicationManifest.xml-bestand . In de volgende XML ziet u een certificaat waarnaar wordt verwezen door de vingerafdruk:

   <Certificates>
       <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="0A00AA0AAAA0AAA00A000000A0AA00A0AAAA00" />
   </Certificates>   

U kunt verwijzen naar het clustercertificaat of een certificaat dat u op elk clusterknooppunt installeert. In Linux moeten de certificaatbestanden aanwezig zijn in de map /var/lib/sfcerts . Zie Locatie en indeling van X.509-certificaten op Linux-knooppunten voor meer informatie.