Поделиться через


Сертификаты и безопасность в кластерах Linux

В этой статье содержатся сведения о настройке сертификатов X.509 в кластерах Linux.

Расположение и формат сертификатов X.509 на узлах Linux

Service Fabric обычно ожидает, что сертификаты X.509 будут присутствовать в каталоге /var/lib/sfcerts на узлах кластера Linux. Это верно для сертификатов кластера, сертификатов клиента и т. д. В некоторых случаях можно указать расположение, отличное от папки var/lib/sfcerts для сертификатов. Например, с помощью Надежных Служб, созданных с использованием Java SDK для платформы Service Fabric, можно указать другое расположение с помощью пакета конфигурации (Settings.xml) для некоторых сертификатов, специфичных для приложения. Дополнительные сведения см. в разделе "Сертификаты", на которые ссылается пакет конфигурации (Settings.xml).

Для кластеров Linux Service Fabric ожидает, что сертификаты будут присутствовать как pem-файл, содержащий сертификат и закрытый ключ, либо в виде CRT-файла, содержащего сертификат и файл .key, содержащий закрытый ключ. Все файлы должны быть в формате PEM.

При установке сертификата из Azure Key Vault с помощью шаблона Resource Manager или команд PowerShell сертификат устанавливается в правильном формате в каталоге /var/lib/sfcerts на каждом узле. При установке сертификата с помощью другого метода необходимо убедиться, что сертификат правильно установлен на узлах кластера.

Сертификаты, на которые ссылается манифест приложения

Сертификаты, указанные в манифесте приложения, например с помощью элементов SecretCertificate или EndpointCertificate , должны присутствовать в каталоге /var/lib/sfcerts . Элементы, используемые для указания сертификатов в манифесте приложения, не принимают атрибут пути, поэтому сертификаты должны присутствовать в каталоге по умолчанию. Эти элементы принимают необязательный атрибут X509StoreName . Значение по умолчанию — My, указывающее на каталог /var/lib/sfcerts на узлах Linux. Любое другое значение не определено в кластере Linux. Рекомендуется опустить атрибут X509StoreName для приложений, работающих в кластерах Linux.

Сертификаты, на которые ссылается пакет конфигурации (Settings.xml)

Для некоторых служб можно настроить сертификаты X.509 в ConfigPackage (по умолчанию Settings.xml). Например, это происходит, когда вы объявляете сертификаты, используемые для защиты каналов RPC для служб «Reliable Services», созданных с помощью SDK «Service Fabric .NET Core» или «Java». Существует два способа ссылаться на сертификаты в пакете конфигурации. Поддержка зависит от пакетов SDK для .NET Core и Java.

Использование X509 SecurityCredentialsType

С помощью пакетов SDK для .NET или Java вы можете указать X509 для SecurityCredentialsType. Это соответствует типу X509CredentialsSecurityCredentials (.NET/Java) (.NET/Java).

Ссылка X509 находит сертификат в хранилище сертификатов. В следующем XML-коде показаны параметры, используемые для указания расположения сертификата:

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

Для службы, работающей в Linux, LocalMachine/My указывает на расположение по умолчанию для сертификатов, каталог /var/lib/sfcerts . Для Linux любые другие сочетания CertificateStoreLocation и CertificateStoreName не определены.

Всегда указывайте LocalMachine для параметра CertificateStoreLocation . Не нужно указывать параметр CertificateStoreName , так как по умолчанию используется значение "My". Со ссылкой на X509 файлы сертификатов должны находиться в каталоге /var/lib/sfcerts на узле кластера.

В следующем XML-коде показан раздел TransportSettings на основе этого стиля:

<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>

Использование X509_2 SecurityCredentialsType

С помощью пакета SDK для Java можно указать X509_2 для SecurityCredentialsType. Это соответствует типу X509Credentials2SecurityCredentials (Java) (Java).

При использовании ссылки X509_2 укажите параметр пути, чтобы найти сертификат в каталоге, отличном от /var/lib/sfcerts. В следующем XML-коде показаны параметры, используемые для указания расположения сертификата:

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

В следующем XML-коде показан раздел TransportSettings на основе этого стиля.

<!--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>

Примечание.

Сертификат указывается как .crt-файл в приведённом выше XML. Это означает, что также есть файл .key, содержащий закрытый ключ в том же расположении.

Настройка приложения Reliable Services для запуска в кластерах Linux

Пакеты SDK Service Fabric позволяют взаимодействовать с API среды выполнения Service Fabric для использования платформы. При запуске любого приложения, использующего эту функцию в защищенных кластерах Linux, необходимо настроить приложение с сертификатом, который он может использовать для проверки с помощью среды выполнения Service Fabric. Для приложений, содержащих службы Service Fabric Reliable Service, созданные с использованием SDK для .NET Core или Java, требуется эта конфигурация.

Чтобы настроить приложение, добавьте элемент SecretCertificate под тегом Certificates , который находится под тегом ApplicationManifest в файле ApplicationManifest.xml . В следующем XML-коде показан сертификат, на который ссылается его отпечаток пальца:

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

Вы можете ссылаться на сертификат кластера или сертификат, установленный на каждом узле кластера. В Linux файлы сертификатов должны присутствовать в каталоге /var/lib/sfcerts . Дополнительные сведения см. в разделе "Расположение и формат сертификатов X.509" на узлах Linux.