Partilhar via


Importar um arquivo de certificado para um contêiner em execução no Service Fabric

Nota

Para clusters do Service Fabric em execução no Azure, é recomendável usar a Identidade Gerenciada de Aplicativo do Service Fabric para provisionar certificados de aplicativo de dentro de um contêiner. A Identidade Gerenciada fornece isolamento de segredos e certificados no nível de serviço e permite que o provisionamento de certificados de aplicativo faça parte do fluxo de trabalho do aplicativo, em vez do fluxo de trabalho da infraestrutura. O mecanismo CertificateRef será preterido em uma versão futura.

Você pode proteger seus serviços de contêiner especificando um certificado. O Service Fabric fornece um mecanismo para que os serviços dentro de um contêiner acessem um certificado instalado nos nós em um cluster Windows ou Linux (versão 5.7 ou superior). O certificado deve ser instalado em um armazenamento de certificados em LocalMachine em todos os nós do cluster. A chave privada correspondente ao certificado deve estar disponível, acessível e - no Windows - exportável. As informações do certificado são fornecidas no manifesto do aplicativo sob a ContainerHostPolicies tag , como mostra o trecho a seguir:

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

Para clusters do Windows, ao iniciar o aplicativo, o tempo de execução exporta cada certificado referenciado e sua chave privada correspondente para um arquivo PFX, protegido com uma senha gerada aleatoriamente. Os arquivos PFX e senha, respectivamente, são acessíveis dentro do contêiner usando as seguintes variáveis de ambiente:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

Para clusters Linux, os certificados (PEM) são copiados do repositório especificado por X509StoreName para o contêiner. As variáveis de ambiente correspondentes no Linux são:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Tenha em atenção que tanto o ficheiro como PrivateKey o PEM contêm o certificado e a chave privada não encriptada.

Como alternativa, se você já tiver os certificados no formulário necessário e quiser acessá-los dentro do contêiner, poderá criar um pacote de dados dentro do pacote do aplicativo e especificar o seguinte dentro do manifesto do aplicativo:

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

O serviço ou processo de contêiner é responsável por importar os arquivos de certificado para o contêiner. Para importar o certificado, você pode usar setupentrypoint.sh scripts ou executar código personalizado dentro do processo de contêiner. Aqui está o código de exemplo em C# para importar o arquivo 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();

Este certificado PFX pode ser usado para autenticar o aplicativo ou serviço ou comunicação segura com outros serviços. Por padrão, os arquivos são ACLed apenas para SYSTEM. Você pode ACL para outras contas, conforme exigido pelo serviço.

Como próximo passo, leia os seguintes artigos: