Certificados e segurança em clusters do Linux

Este artigo fornece informações sobre como configurar certificados X.509 em clusters linux.

Localização e formato dos certificados X.509 nos nós do Linux

Geralmente, o Service Fabric espera que os certificados X.509 estejam presentes no diretório /var/lib/sfcerts em nós de cluster do Linux. Isto aplica-se a certificados de cluster, certificados de cliente, etc. Em alguns casos, pode especificar uma localização diferente da pasta var/lib/sfcerts para certificados. Por exemplo, com o Reliable Services criado com o SDK Java do Service Fabric, pode especificar uma localização diferente através do pacote de configuração (Settings.xml) para alguns certificados específicos da aplicação. Para saber mais, veja Certificados referenciados no pacote de configuração (Settings.xml).

Para clusters do Linux, o Service Fabric espera que os certificados estejam presentes como um ficheiro .pem que contém o certificado e a chave privada ou como um ficheiro .crt que contém o certificado e um ficheiro .key que contém a chave privada. Todos os ficheiros devem estar no formato PEM.

Se instalar o certificado a partir do Azure Key Vault utilizando um modelo de Resource Manager ou comandos do PowerShell, o certificado é instalado no formato correto no diretório /var/lib/sfcerts em cada nó. Se instalar um certificado através de outro método, tem de se certificar de que o certificado está corretamente instalado nos nós de cluster.

Certificados referenciados no manifesto da aplicação

Os certificados especificados no manifesto da aplicação, por exemplo, através dos elementos SecretsCertificate ou EndpointCertificate , têm de estar presentes no diretório /var/lib/sfcerts . Os elementos utilizados para especificar certificados no manifesto da aplicação não têm um atributo de caminho, pelo que os certificados têm de estar presentes no diretório predefinido. Estes elementos têm um atributo X509StoreName opcional. A predefinição é "My", que aponta para o diretório /var/lib/sfcerts nos nós do Linux. Qualquer outro valor é indefinido num cluster do Linux. Recomendamos que omita o atributo X509StoreName para aplicações executadas em clusters do Linux.

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

Para alguns serviços, pode configurar certificados X.509 no ConfigPackage (por predefinição, Settings.xml). Por exemplo, este é o caso quando declara certificados utilizados para proteger canais RPC para serviços Reliable Services criados com os SDKs .NET Core ou Java do Service Fabric. Existem duas formas de referenciar certificados no pacote de configuração. O suporte varia entre os SDKs .NET Core e Java.

Utilizar o SecurityCredentialsType X509

WIth os SDKs .NET ou Java, pode especificar X509 para SecurityCredentialsType. Isto corresponde ao X509Credentials tipo (.NET/Java) de SecurityCredentials (.NET/Java).

A referência X509 localiza o certificado num arquivo de certificados. O XML seguinte mostra os parâmetros utilizados para especificar a localização 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 a localização predefinida para certificados, o diretório /var/lib/sfcerts . Para o Linux, todas as outras combinações de CertificateStoreLocation e CertificateStoreName são indefinidas.

Especifique sempre LocalMachine para o parâmetro CertificateStoreLocation . Não é necessário especificar o parâmetro CertificateStoreName porque é predefinido como "O Meu". Com uma referência X509 , os ficheiros de certificado têm de estar localizados no diretório /var/lib/sfcerts no nó do cluster.

O XML seguinte mostra uma secção TransportSettings com base neste estilo:

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

Utilizar X509_2 SecurityCredentialsType

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

Com uma referência X509_2 , especifique um parâmetro de caminho, para que possa localizar o certificado num diretório diferente de /var/lib/sfcerts. O XML seguinte mostra os parâmetros utilizados para especificar a localização do certificado:

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

O XML seguinte mostra uma secção TransportSettings com base 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/BD1C71E248B8C6834C151174DECDBDC02DE1D954.crt" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptandSign" />
    <Parameter Name="CertificateRemoteThumbprints" Value="BD1C71E248B8C6834C151174DECDBDC02DE1D954" />
</Section>

Nota

O certificado é especificado como um ficheiro .crt no XML anterior. Isto implica que também existe um ficheiro .key que contém a chave privada na mesma localização.

Configurar uma aplicação reliable Services para ser executada em clusters do Linux

Os SDKs do Service Fabric permitem-lhe comunicar com as APIs de runtime do Service Fabric para tirar partido da plataforma. Quando executa qualquer aplicação que utilize esta funcionalidade em clusters do Linux seguros, tem de configurar a sua aplicação com um certificado que possa utilizar para validar com o runtime do Service Fabric. As aplicações que contêm serviços do Service Fabric Reliable Service escritos com os SDKs .NET Core ou Java necessitam desta configuração.

Para configurar uma aplicação, adicione um elemento SecretsCertificate na etiqueta Certificados , que está localizada na etiqueta ApplicationManifest no ficheiro ApplicationManifest.xml . O XML seguinte mostra um certificado referenciado pelo thumbprint:

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

Pode referenciar o certificado de cluster ou um certificado que instala em cada nó de cluster. No Linux, os ficheiros de certificado têm de estar presentes no diretório /var/lib/sfcerts . Para saber mais, veja Localização e formato dos certificados X.509 nos nós do Linux.