Compartilhar via


Certificados e segurança em clusters do Linux

Este artigo fornece informações sobre como configurar certificados x. 509 em clusters do Linux.

Localização e formato de certificados X.509 em nós do Linux

Service Fabric geralmente espera que os certificados X.509 estejam presentes no diretório /var/lib/sfcerts nos nós de cluster do Linux. Isso é verdadeiro para certificados de cluster, certificados de cliente etc. Em alguns casos, você pode especificar um local diferente da pasta var/lib/sfcerts para certificados. Por exemplo, com os Reliable Services criados usando o Service Fabric Java SDK, você pode especificar um local diferente através do pacote de configuração (Settings.xml) para os certificados específicos do aplicativo. Para obter mais informações, consulte certificados referenciados no pacote de configuração (Settings.xml).

Para clusters Linux, o Service Fabric espera que os certificados estejam presentes como um arquivo .pem que contenha tanto o certificado quanto a chave privada ou como um arquivo .crt que contenha o certificado e um arquivo .key que contenha a chave privada. Todos os arquivos devem estar no formato PEM.

Se você instalar o certificado do Cofre de Chaves do Azure usando um modelo do Gerenciador de recursos ou comandos PowerShell, o certificado é instalado no formato correto no diretório /var/lib/sfcerts em cada nó. Se você instalar um certificado por outro método, você deve garantir que o certificado está instalado corretamente em nós de cluster.

Certificados referenciados no manifesto do aplicativo

Os certificados especificados no manifesto do aplicativo, por exemplo, por meio dos elementos SecretsCertificate ou EndpointCertificate , devem estar presentes no diretório /var/lib/sfcerts. Os elementos usados para especificar certificados no manifesto do aplicativo não usam um atributo de caminho, portanto, os certificados devem estar presentes no diretório padrão. Esses elementos aceitam um atributo X509StoreName opcional. O padrão é "My", que aponta para o diretório /var/lib/sfcerts nos nós do Linux. Qualquer outro valor é indefinido em um cluster Linux. Recomendamos que você omita o atributo X509StoreName para aplicativos executados em clusters do Linux.

Certificados referenciados no pacote de configuração (Settings.xml)

Para alguns serviços, você pode configurar certificados X.509 no ConfigPackage (por padrão, Settings.xml). Por exemplo, esse é o caso quando você declara certificados usados para proteger canais RPC para serviços do Reliable Services criados com o Service Fabric .NET Core ou Java SDKs. Há duas maneiras de referenciar certificados no pacote de configuração. O Suporte varia entre o .NET Core e os SDKs Java.

Usando X509 SecurityCredentialsType

Com o .NET ou Java SDks, você consegue especificar X509 para o SecurityCredentialsType. Isto corresponde ao X509Credentials (.NET/Java) tipo de SecurityCredentials (.NET/Java).

A referência X509 localiza o certificado em um armazenamento de certificados. O XML a seguir mostra os parâmetros usados para especificar o local do certificado:

    <Parameter Name="SecurityCredentialsType" Value="X509" />
    <Parameter Name="CertificateStoreLocation" Value="LocalMachine" />
    <Parameter Name="CertificateStoreName" Value="My" />

Para um serviço em execução no Linux, LocalMachine/My aponta para o local padrão para certificados, o diretório /var/lib/sfcerts . Para Linux, quaisquer outras combinações de CertificateStoreLocation e CertificateStoreName são indefinidas.

Sempre especificar LocalMachine para o parâmetro CertificateStoreLocation. Não há necessidade de especificar o parâmetro CertificateStoreName porque ele tem como padrão “My”. Com uma referência X509, os arquivos de certificado devem estar localizados no diretório /var/lib/sfcerts no nó do cluster.

O seguinte XML mostra uma seção TransportSettings baseada neste estilo:

<Section Name="HelloWorldStatefulTransportSettings">
    <Parameter Name="MaxMessageSize" Value="10000000" />
    <Parameter Name="SecurityCredentialsType" Value="X509" />
    <Parameter Name="CertificateFindType" Value="FindByThumbprint" />
    <Parameter Name="CertificateFindValue" Value="AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00" />
    <Parameter Name="CertificateRemoteThumbprints" Value="BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11" />
    <Parameter Name="CertificateStoreLocation" Value="LocalMachine" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptAndSign" />
    <Parameter Name="CertificateRemoteCommonNames" Value="ServiceFabric-Test-Cert" />
</Section>

Usando X509_2 SecurityCredentialsType

Com o Java SDK, você pode especificar X509_2 para o SecurityCredentialsType. Isto corresponde ao X509Credentials2 (Java) tipo de SecurityCredentials (Java).

Com uma referência X509_2, você especifica um parâmetro path, para poder localizar o certificado em um diretório diferente de/var/lib/sfcerts. O XML a seguir mostra os parâmetros usados para especificar o local do certificado:

     <Parameter Name="SecurityCredentialsType" Value="X509_2" />
     <Parameter Name="CertificatePath" Value="/path/to/cert/CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22.crt" />

O seguinte XML mostra uma seção TransportSettings baseada neste estilo.

<!--Section name should always end with "TransportSettings".-->
<!--Here we are using a prefix "HelloWorldStateless".-->
<Section Name="HelloWorldStatelessTransportSettings">
    <Parameter Name="MaxMessageSize" Value="10000000" />
    <Parameter Name="SecurityCredentialsType" Value="X509_2" />
    <Parameter Name="CertificatePath" Value="/path/to/cert/CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22.crt" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptandSign" />
    <Parameter Name="CertificateRemoteThumbprints" Value="CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22" />
</Section>

Observação

O certificado é especificado como um arquivo .crt no XML precedente. Isto implica que há também um arquivo .key contendo uma chave privada no mesmo local.

Configurar um aplicativo de Reliable Services para executar em clusters do Linux

Os SDKs do Service Fabric permitem que você se comunique com as APIs de runtime do Service Fabric para aproveitar a plataforma. Quando você executa qualquer aplicativo que usa essa funcionalidade em clusters Linux seguros, é necessário configurar seu aplicativo com um certificado que possa ser usado para validar com o runtime do Service Fabric. Aplicativos que contêm serviços Service Fabric Reliable Service escritos usando o .NET Core ou Java SDKs exigem essa configuração.

Para configurar um aplicativo, adicione um elemento SecretsCertificate sob a marca Certificates, localizada sob a marca ApplicationManifest no arquivo ApplicationManifest.xml. O XML seguinte mostra um certificado referenciado pela sua impressão digital:

   <Certificates>
       <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="0A00AA0AAAA0AAA00A000000A0AA00A0AAAA00" />
   </Certificates>   

Você consegue referenciar tanto o certificado de cluster quanto um certificado que você instalou em cada nó de cluster. No Linux, os arquivos de certificado devem estar presentes no diretório /var/lib/sfcerts. Para saber mais, consulte Formato e local dos certificados X.509 nos nós Linux.