Importieren einer Zertifikatdatei in einen Container, der unter Service Fabric ausgeführt wirdImport a certificate file into a container running on Service Fabric

Containerdienste können durch Angabe eines Zertifikats geschützt werden.You can secure your container services by specifying a certificate. Service Fabric bietet einen Mechanismus, über den Dienste innerhalb eines Containers auf ein Zertifikat zugreifen können, das auf den Knoten eines Windows- oder Linux-Clusters (ab Version 5.7) installiert ist.Service Fabric provides a mechanism for services inside a container to access a certificate that is installed on the nodes in a Windows or Linux cluster (version 5.7 or higher). Das Zertifikat muss in einem Zertifikatspeicher unter LocalMachine auf allen Knoten des Clusters installiert werden.The certificate must be installed in a certificate store under LocalMachine on all nodes of the cluster. Der mit dem Zertifikat übereinstimmende private Schlüssel muss verfügbar, zugänglich und – unter Windows – exportierbar sein.The private key corresponding to the certificate must be available, accessible and - on Windows - exportable. Die Zertifikatinformationen werden im Anwendungsmanifest unter dem Tag ContainerHostPolicies angegeben, wie im folgenden Codeausschnitt zu sehen:The certificate information is provided in the application manifest under the ContainerHostPolicies tag as the following snippet shows:

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

Für Windows-Cluster exportiert die Runtime beim Start der Anwendung alle referenzierten Zertifikate und die zugehörigen entsprechenden privaten Schlüssel in eine PFX-Datei und schützt sie jeweils durch ein zufällig generiertes Kennwort.For Windows clusters, when starting the application, the runtime exports each referenced certificate and its corresponding private key into a PFX file, secured with a randomly-generated password. Auf die PFX- und Kennwortdateien kann jeweils innerhalb des Containers über folgende Umgebungsvariablen zugegriffen werden:The PFX and password files, respectively, are accessible inside the container using the following environment variables:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFXCertificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_PasswordCertificates_ServicePackageName_CodePackageName_CertName_Password

Für Linux-Cluster werden die Zertifikate (PEM) aus dem durch X509StoreName angegebenen Speicher in den Container kopiert.For Linux clusters, the certificates (PEM) are copied over from the store specified by X509StoreName onto the container. Die entsprechenden Linux-Umgebungsvariablen sind:The corresponding environment variables on Linux are:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEMCertificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKeyCertificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Wenn Sie bereits über die Zertifikate im erforderlichen Format verfügen und innerhalb des Containers darauf zugreifen möchten, können Sie alternativ ein Datenpaket innerhalb des App-Pakets erstellen und Folgendes in Ihrem Anwendungsmanifest angeben:Alternatively, if you already have the certificates in the required form and want to access it inside the container, you can create a data package inside your app package and specify the following inside your application manifest:

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

Die Zertifikatdateien werden vom Containerdienst oder -prozess in den Container importiert.The container service or process is responsible for importing the certificate files into the container. Für den Zertifikatimport können Sie Skripts vom Typ setupentrypoint.sh verwenden oder benutzerdefinierten Code innerhalb des Containers ausführen.To import the certificate, you can use setupentrypoint.sh scripts or execute custom code within the container process. C#-Beispielcode zum Importieren der PFX-Datei:Here is sample code in C# for importing the PFX file:

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

Dieses PFX-Zertifikat kann verwendet werden, um die Anwendung oder den Dienst zu authentifizieren oder die Kommunikation mit anderen Diensten zu schützen.This PFX certificate can be used for authenticating the application or service or secure communication with other services. Standardmäßig ist der Zugriff auf die Dateien nur über das Konto SYSTEM möglich.By default, the files are ACLed only to SYSTEM. Wenn der Dienst es erfordert, können Sie den Zugriff über andere Konten einrichten.You can ACL it to other accounts as required by the service.

Lesen Sie als Nächstes die folgenden Artikel:As a next step, read the following articles: