Linux 群集上的证书和安全性

本文提供有关在 Linux 群集上配置 X.509 证书的信息。

Linux 节点上的 X.509 证书的位置和格式

Service Fabric 通常要求在 Linux 群集节点上的 /var/lib/sfcerts 目录中提供 X.509 证书。 这适用于群集证书、客户端证书等。在某些情况下,可以为证书指定“var/lib/sfcerts”文件夹以外的位置。 例如,在使用 Service Fabric Java SDK 生成的 Reliable Services 中,可以通过配置包 (Settings.xml) 为某些特定于应用程序的证书指定不同的位置。 有关详细信息,请参阅配置包 (Settings.xml) 中引用的证书

对于 Linux 群集,Service Fabric 要求以包含证书和私钥的 .pem 文件形式提供证书,或者以包含证书的 .crt 文件和包含私钥的 .key 文件形式提供证书。 所有文件应采用 PEM 格式。

如果使用资源管理器模板PowerShell 命令从 Azure Key Vault 安装证书,证书将以正确的格式安装在每个节点上的 /var/lib/sfcerts 目录中。 如果通过其他方法安装证书,必须确保在群集节点上正确安装证书。

应用程序清单中引用的证书

应用程序清单中指定的证书(例如,通过 SecretsCertificateEndpointCertificate 元素指定)必须位于 /var/lib/sfcerts 目录中。 用于在应用程序清单中指定证书的元素不采用路径属性,因此证书必须位于默认目录中。 这些元素采用可选的 X509StoreName 属性。 默认值为“My”,指向 Linux 节点上的 /var/lib/sfcerts 目录。 其他任何值未在 Linux 群集上定义。 对于 Linux 群集上运行的应用,我们建议省略 X509StoreName 属性。

配置包 (Settings.xml) 中引用的证书

对于某些服务,可在 ConfigPackage(默认为 Settings.xml)中配置 X.509 证书。 例如,在声明用于保护通过 Service Fabric .NET Core 或 Java SDK 生成的 Reliable Services 服务的 RPC 通道时,便可以这样做。 可在配置包中通过两种方式引用证书。 支持的方式根据使用的是 .NET Core 还是 Java SDK 而异。

使用 X509 SecurityCredentialsType

使用 .NET 或 Java SDK,可为 SecurityCredentialsType 指定 X509。 此值对应于 SecurityCredentials (.NET/Java) 类型的 X509Credentials (.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,CertificateStoreLocationCertificateStoreName 的其他任何组合均未定义。

请始终为 CertificateStoreLocation 参数指定 LocalMachine。 无需指定 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>

使用 X509_2 SecurityCredentialsType

使用 Java SDK,可为 SecurityCredentialsType 指定 X509_2。 此值对应于 SecurityCredentials (Java) 类型的 X509Credentials2 (Java)。

使用 X509_2 引用时,请指定路径参数,以便可以在除 /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 文件。

配置在 Linux 群集上运行的 Reliable Services 应用

使用 Service Fabric SDK 可与 Service Fabric 运行时 API 通信,以利用平台。 在安全的 Linux 群集上运行使用此功能的任何应用程序时,需要使用一个证书来配置该应用程序,该证书可用于验证 Service Fabric 运行时。 包含使用 .NET Core 或 Java SDK 编写的 Service Fabric Reliable Service 服务的应用程序需要此配置。

若要配置应用程序,请在 Certificates 标记(位于 ApplicationManifest.xml 文件中的 ApplicationManifest 标记下面)下面添加一个 SecretsCertificate 元素。 以下 XML 显示按证书指纹引用的证书:

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

可以引用群集证书,或每个群集节点上安装的证书。 在 Linux 上,证书文件必须位于 /var/lib/sfcerts 目录中。 有关详细信息,请参阅 Linux 节点上的 X.509 证书的位置和格式