Sdílet prostřednictvím


Import souboru certifikátu do kontejneru spuštěného v Service Fabric

Poznámka

U clusterů Service Fabric spuštěných v Azure se doporučuje použít spravovanou identitu aplikace Service Fabric ke zřízení certifikátů aplikací z kontejneru. Spravovaná identita poskytuje izolaci tajných kódů a certifikátů na úrovni služby a umožňuje, aby zřizování certifikátů aplikací bylo součástí pracovního postupu aplikace, nikoli pracovního postupu infrastruktury. Mechanismus CertificateRef bude v budoucí verzi zastaralý.

Služby kontejneru můžete zabezpečit zadáním certifikátu. Service Fabric poskytuje mechanismus pro přístup ke službám v kontejneru k certifikátu nainstalovanému na uzlech v clusteru s Windows nebo Linuxem (verze 5.7 nebo vyšší). Certifikát musí být nainstalovaný v úložišti certifikátů v části LocalMachine na všech uzlech clusteru. Privátní klíč odpovídající certifikátu musí být dostupný, přístupný a ve Windows musí být exportovatelný. Informace o certifikátu jsou uvedené v manifestu aplikace pod značkou ContainerHostPolicies , jak ukazuje následující fragment kódu:

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

U clusterů s Windows modul runtime při spouštění aplikace exportuje každý odkazovaný certifikát a jeho odpovídající privátní klíč do souboru PFX zabezpečeného náhodně vygenerovaným heslem. Soubory PFX a password jsou přístupné uvnitř kontejneru pomocí následujících proměnných prostředí:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

V případě linuxových clusterů se certifikáty (PEM) zkopírují z úložiště určeného parametrem X509StoreName do kontejneru. Odpovídající proměnné prostředí v Linuxu jsou:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Mějte na paměti, že soubor i PEMPrivateKey obsahují certifikát a nešifrovaný privátní klíč.

Případně pokud už máte certifikáty v požadovaném formuláři a chcete k němu přistupovat uvnitř kontejneru, můžete vytvořit balíček dat uvnitř balíčku aplikace a v manifestu aplikace zadat následující:

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

Za import souborů certifikátů do kontejneru zodpovídá služba nebo proces kontejneru. K importu certifikátu můžete použít setupentrypoint.sh skripty nebo spustit vlastní kód v rámci procesu kontejneru. Tady je ukázkový kód v jazyce C# pro import souboru PFX:

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

Tento certifikát PFX lze použít k ověřování aplikace nebo služby nebo k zabezpečené komunikaci s jinými službami. Ve výchozím nastavení jsou soubory ACLed pouze pro SYSTÉM. Seznam ACL můžete podle požadavků služby použít k jiným účtům.

Jako další krok si přečtěte následující články: