Udostępnij za pośrednictwem


Importowanie pliku certyfikatu do kontenera uruchomionego w usłudze Service Fabric

Uwaga

W przypadku klastrów usługi Service Fabric działających na platformie Azure zaleca się używanie tożsamości zarządzanej aplikacji usługi Service Fabric do aprowizowania certyfikatów aplikacji z poziomu kontenera. Tożsamość zarządzana zapewnia izolację wpisów tajnych i certyfikatów na poziomie usługi i umożliwia aprowizowanie certyfikatów aplikacji jako część przepływu pracy aplikacji, a nie przepływu pracy infrastruktury. Mechanizm CertificateRef zostanie wycofany w przyszłej wersji.

Usługi kontenerów można zabezpieczyć, określając certyfikat. Usługa Service Fabric udostępnia mechanizm usług wewnątrz kontenera w celu uzyskania dostępu do certyfikatu zainstalowanego w węzłach w klastrze systemu Windows lub Linux (wersja 5.7 lub nowsza). Certyfikat musi być zainstalowany w magazynie certyfikatów w obszarze LocalMachine na wszystkich węzłach klastra. Klucz prywatny odpowiadający certyfikatowi musi być dostępny, dostępny i — w systemie Windows — możliwy do eksportowania. Informacje o certyfikacie są udostępniane w manifeście aplikacji pod tagiem ContainerHostPolicies , jak pokazano w poniższym fragmencie kodu:

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

W przypadku klastrów systemu Windows podczas uruchamiania aplikacji środowisko uruchomieniowe eksportuje każdy przywoływalny certyfikat i odpowiadający mu klucz prywatny do pliku PFX zabezpieczonego losowo wygenerowanym hasłem. Pliki PFX i password są dostępne odpowiednio w kontenerze przy użyciu następujących zmiennych środowiskowych:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

W przypadku klastrów systemu Linux certyfikaty (PEM) są kopiowane z magazynu określonego przez X509StoreName do kontenera. Odpowiednie zmienne środowiskowe w systemie Linux to:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Należy pamiętać, że zarówno PEM plik , jak i PrivateKey zawiera certyfikat oraz niezaszyfrowany klucz prywatny.

Alternatywnie, jeśli masz już certyfikaty w wymaganym formularzu i chcesz uzyskać do niego dostęp wewnątrz kontenera, możesz utworzyć pakiet danych wewnątrz pakietu aplikacji i określić następujące elementy w manifeście aplikacji:

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

Usługa kontenera lub proces jest odpowiedzialny za importowanie plików certyfikatów do kontenera. Aby zaimportować certyfikat, możesz użyć setupentrypoint.sh skryptów lub wykonać kod niestandardowy w procesie kontenera. Oto przykładowy kod w języku C# do importowania pliku 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();

Ten certyfikat PFX może służyć do uwierzytelniania aplikacji lub usługi lub bezpiecznej komunikacji z innymi usługami. Domyślnie pliki są acLed tylko do SYSTEM. Listę ACL można utworzyć na innych kontach zgodnie z wymaganiami usługi.

W następnym kroku przeczytaj następujące artykuły: