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


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

Данная статья содержит информацию о настройке сертификатов X.509 в кластерах Linux.

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

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

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

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

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

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

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

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

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

При использовании пакетов SDK для .NET или Java вы можете указать X509 для SecurityCredentialsType. Это соответствует типу X509Credentials (.NET/Java) SecurityCredentials (.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="4FEF3950642138446CC364A396E1E881DB76B48C" />
    <Parameter Name="CertificateRemoteThumbprints" Value="9FEF3950642138446CC364A396E1E881DB76B483" />
    <Parameter Name="CertificateStoreLocation" Value="LocalMachine" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptAndSign" />
    <Parameter Name="CertificateRemoteCommonNames" Value="ServiceFabric-Test-Cert" />
</Section>

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

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

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

     <Parameter Name="SecurityCredentialsType" Value="X509_2" />
     <Parameter Name="CertificatePath" Value="/path/to/cert/BD1C71E248B8C6834C151174DECDBDC02DE1D954.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/BD1C71E248B8C6834C151174DECDBDC02DE1D954.crt" />
    <Parameter Name="CertificateProtectionLevel" Value="EncryptandSign" />
    <Parameter Name="CertificateRemoteThumbprints" Value="BD1C71E248B8C6834C151174DECDBDC02DE1D954" />
</Section>

Примечание

В предыдущем коде XML сертификат указывается как CRT-файл. Это означает, что в том же расположении находится и KEY-файл, содержащий закрытый ключ.

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

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

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

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

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