Dela via


Importera en certifikatfil till en container som körs i Service Fabric

Kommentar

För Service Fabric-kluster som körs i Azure rekommenderar vi att du använder Service Fabric Application Managed Identity för att etablera programcertifikat inifrån en container. Hanterad identitet isolerar hemligheter och certifikat på tjänstnivå och gör att etablering av programcertifikat kan ingå i programmets arbetsflöde i stället för infrastrukturens arbetsflöde. CertificateRef-mekanismen kommer att bli inaktuell i en framtida version.

Du kan skydda dina containertjänster genom att ange ett certifikat. Service Fabric tillhandahåller en mekanism för tjänster i en container för att komma åt ett certifikat som är installerat på noderna i ett Windows- eller Linux-kluster (version 5.7 eller senare). Certifikatet måste installeras i ett certifikatarkiv under LocalMachine på alla noder i klustret. Den privata nyckel som motsvarar certifikatet måste vara tillgänglig, tillgänglig och – i Windows – kunna exporteras. Certifikatinformationen anges i programmanifestet under taggen ContainerHostPolicies som följande kodfragment visar:

  <ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
    <CertificateRef Name="MyCert1" X509StoreName="My" X509FindValue="[Thumbprint1]"/>
    <CertificateRef Name="MyCert2" X509FindValue="[Thumbprint2]"/>

För Windows-kluster exporterar körningen varje refererat certifikat och dess motsvarande privata nyckel till en PFX-fil som skyddas med ett slumpmässigt genererat lösenord när programmet startas. PFX- respektive lösenordsfilerna är tillgängliga i containern med hjälp av följande miljövariabler:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

För Linux-kluster kopieras certifikaten (PEM) från det arkiv som anges av X509StoreName till containern. Motsvarande miljövariabler i Linux är:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Observera att både PEM filen och innehåller PrivateKey certifikatet och den okrypterade privata nyckeln.

Om du redan har certifikaten i det formulär som krävs och vill komma åt dem i containern kan du också skapa ett datapaket i apppaketet och ange följande i programmanifestet:

<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
  <CertificateRef Name="MyCert1" DataPackageRef="[DataPackageName]" DataPackageVersion="[Version]" RelativePath="[Relative Path to certificate inside DataPackage]" Password="[password]" IsPasswordEncrypted="[true/false]"/>

Containertjänsten eller processen ansvarar för att importera certifikatfilerna till containern. Om du vill importera certifikatet kan du använda setupentrypoint.sh skript eller köra anpassad kod i containerprocessen. Här är exempelkoden i C# för import av PFX-filen:

string certificateFilePath = Environment.GetEnvironmentVariable("Certificates_MyServicePackage_NodeContainerService.Code_MyCert1_PFX");
string passwordFilePath = Environment.GetEnvironmentVariable("Certificates_MyServicePackage_NodeContainerService.Code_MyCert1_Password");
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
string password = File.ReadAllLines(passwordFilePath, Encoding.Default)[0];
password = password.Replace("\0", string.Empty);
X509Certificate2 cert = new X509Certificate2(certificateFilePath, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

Det här PFX-certifikatet kan användas för att autentisera programmet eller tjänsten eller för säker kommunikation med andra tjänster. Som standard är filerna endast ACLed till SYSTEM. Du kan ACL det till andra konton som krävs av tjänsten.

Läs följande artiklar i nästa steg: