Certificados e segurança em clusters Linux

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

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

O 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 é verdade 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 Serviços Confiáveis criados usando o SDK Java do Service Fabric, você pode especificar um local diferente por meio do pacote de configuração (Settings.xml) para alguns certificados específicos do aplicativo. Para saber mais, 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 contém o certificado e a chave privada ou como um arquivo .crt que contém o certificado e um arquivo .key que contém a chave privada. Todos os ficheiros devem estar em formato PEM.

Se você instalar seu certificado do Cofre da Chave do Azure usando um modelo do Gerenciador de Recursos ou comandos do PowerShell , o certificado será instalado no formato correto no diretório /var/lib/sfcerts em cada nó. Se você instalar um certificado por meio de outro método, deverá certificar-se de que o certificado está instalado corretamente nos nós do cluster.

Certificados referenciados no manifesto do pedido

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 path, portanto, os certificados devem estar presentes no diretório padrão. Esses elementos usam um atributo X509StoreName opcional. O padrão é "My", que aponta para o diretório /var/lib/sfcerts nos nós Linux. Qualquer outro valor é indefinido em um cluster Linux. Recomendamos que você omita o atributo X509StoreName para aplicativos executados em clusters 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 de Serviços Confiáveis criados com o Service Fabric .NET Core ou Java SDKs. Há duas maneiras de fazer referência a certificados no pacote de configuração. O suporte varia entre os SDKs .NET Core e Java.

Usando X509 SecurityCredentialsType

Com os SDKs .NET ou Java, você pode especificar X509 para SecurityCredentialsType. Isso corresponde ao X509Credentials tipo (.NET/Java) 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 especifique LocalMachine para o parâmetro CertificateStoreLocation . Não há necessidade de especificar o parâmetro CertificateStoreName porque o padrão é "Meu". Com uma referência X509 , os arquivos de certificado devem estar localizados no diretório /var/lib/sfcerts no nó do cluster.

O XML a seguir mostra uma seção TransportSettings com base nesse 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>

Usando X509_2 SecurityCredentialsType

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

Com uma referência X509_2 , você especifica um parâmetro path, para que possa 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/BD1C71E248B8C6834C151174DECDBDC02DE1D954.crt" />

O XML a seguir mostra uma seção TransportSettings com base nesse 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 arquivo .crt no XML anterior. Isso implica que também há um arquivo .key contendo a chave privada no mesmo local.

Configurar um aplicativo de Serviços Confiáveis para ser executado em clusters Linux

Os SDKs do Service Fabric permitem que você se comunique com as APIs de tempo de execução do Service Fabric para aproveitar a plataforma. Ao executar qualquer aplicativo que use essa funcionalidade em clusters Linux seguros, você precisa configurar seu aplicativo com um certificado que ele possa usar para validar com o tempo de execução do Service Fabric. Os aplicativos que contêm serviços do 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, que está localizada sob a tag ApplicationManifest no arquivo ApplicationManifest.xml. O XML a seguir mostra um certificado referenciado por sua impressão digital:

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

Você pode fazer referência ao certificado de cluster ou a um certificado instalado em cada nó de cluster. No Linux, os arquivos de certificado devem estar presentes no diretório /var/lib/sfcerts . Para saber mais, consulte Localização e formato de certificados X.509 em nós Linux.