Share via


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

Notitie

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

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, toegankelijk 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 uit 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 zowel het PEM certificaat als PrivateKey het bestand het certificaat en de niet-versleutelde persoonlijke sleutel bevatten.

Als u de certificaten al in het vereiste formulier hebt en deze in de container wilt openen, kunt u ook een gegevenspakket in uw app-pakket maken en het volgende opgeven in het 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 proces 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 binnen 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. De bestanden zijn standaard alleen ACLed voor SYSTEM. U kunt de ACL naar andere accounts toewijzen, zoals vereist door de service.

Lees de volgende artikelen als volgende stap: