Delen via


Een certificaatbestand importeren in een container die wordt uitgevoerd in Service Fabric

Notitie

Voor Service Fabric-clusters die in Azure worden uitgevoerd, wordt het aanbevolen om Service Fabric Application Managed Identity te gebruiken om toepassingscertificaten in te richten vanuit een container. Beheerde identiteit biedt isolatie van geheimen en certificaten op serviceniveau en maakt het inrichten van toepassingscertificaten onderdeel van de werkstroom van de toepassing in plaats van de werkstroom van de infrastructuur. Het CertificateRef-mechanisme wordt in een toekomstige release afgeschaft.

U kunt uw containerservices beveiligen door een certificaat op te geven. Service Fabric biedt een mechanisme voor services in een container voor toegang tot een certificaat dat is geïnstalleerd op de knooppunten in een Windows- of Linux-cluster (versie 5.7 of hoger). Het certificaat moet worden geïnstalleerd in een certificaatarchief onder LocalMachine op alle knooppunten van het cluster. De persoonlijke sleutel die overeenkomt met het certificaat moet beschikbaar zijn, toegankelijk zijn en - in Windows - kunnen worden geëxporteerd. De certificaatgegevens worden opgegeven in het toepassingsmanifest onder de ContainerHostPolicies tag, zoals in het volgende codefragment wordt weergegeven:

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

Voor Windows-clusters exporteert de runtime bij het starten van de toepassing elk certificaat waarnaar wordt verwezen en de bijbehorende persoonlijke sleutel naar een PFX-bestand, beveiligd met een willekeurig gegenereerd wachtwoord. De PFX- en wachtwoordbestanden zijn respectievelijk toegankelijk in de container met behulp van de volgende omgevingsvariabelen:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

Voor Linux-clusters worden de certificaten (PEM) gekopieerd vanuit het archief dat is opgegeven door X509StoreName naar de container. De bijbehorende omgevingsvariabelen in Linux zijn:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Houd er rekening mee dat het bestand en PrivateKey zowel het PEM certificaat als de niet-versleutelde persoonlijke sleutel bevatten.

Als u de certificaten al in de vereiste vorm hebt en deze in de container wilt openen, kunt u ook een gegevenspakket maken in uw app-pakket en het volgende opgeven in uw toepassingsmanifest:

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

De containerservice of het containerproces is verantwoordelijk voor het importeren van de certificaatbestanden in de container. Als u het certificaat wilt importeren, kunt u scripts gebruiken setupentrypoint.sh of aangepaste code uitvoeren in het containerproces. Hier volgt voorbeeldcode in C# voor het importeren van het PFX-bestand:

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

Dit PFX-certificaat kan worden gebruikt voor het verifiëren van de toepassing of service of voor beveiligde communicatie met andere services. Standaard worden de bestanden alleen naar SYSTEM uitgevoerd. U kunt ACL's gebruiken voor andere accounts zoals vereist door de service.

Lees als volgende stap de volgende artikelen: