Sdílet prostřednictvím


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

Poznámka:

Pro clustery Service Fabric spuštěné 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 služby uvnitř kontejneru pro přístup 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 rámci LocalMachine na všech uzlech clusteru. Privátní klíč odpovídající certifikátu musí být dostupný, přístupný a exportovatelný – ve Windows. 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]"/>

V případě clusterů s Windows modul runtime při spuštění aplikace exportuje každý odkazovaný certifikát a odpovídající privátní klíč do souboru PFX, který je zabezpečený náhodně vygenerovaným heslem. Soubory PFX a hesla jsou v kontejneru přístupné 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 X509StoreName do kontejneru. Odpovídající proměnné prostředí v Linuxu jsou:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Upozorňujeme, že certifikát PEM i PrivateKey soubor obsahují certifikát i nešifrovaný privátní klíč.

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

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

Služba kontejneru nebo proces zodpovídá za import souborů certifikátů do 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 na SYSTÉM. Seznam ACL můžete podle potřeby služby vyřadit do jiných účtů.

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