跳到主要内容

配置DMR集群

集群是事件代理上的一个配置对象,包含全局DMR配置参数。每个节点只能有一个集群。配置在集群级别的参数适用于集群中的所有链接,除非您通过提供等效的集群链接级别配置来覆盖每个设置。

要创建一个集群,请输入以下命令:

solace(configure)# routing
solace(configure/routing)# dynamic-message-routing
solace(...igure/routing/dynamic-message-routing)# create cluster <cluster-name>

要配置现有集群,请输入以下命令:

solace(...igure/routing/dynamic-message-routing)# cluster <cluster-name>

要启用集群,请输入以下命令:

solace(...uting/dynamic-message-routing/cluster)# no shutdown

其中:

<cluster-name>是您希望该节点所属的集群名称。

您可以为现有集群执行的配置任务包括:

  • 配置集群上的身份验证
  • 启用TLS/SSL加密

配置集群上的身份验证

当您配置集群级别的身份验证时,每个设置适用于集群中的所有链接。如果您希望提供每个链接的身份验证,请参阅配置链接上的身份验证。

配置基本身份验证

基本身份验证是PubSub+事件代理使用的默认客户端身份验证方案。此身份验证方案允许集群链接连接到远程节点,并使用密码对该节点进行身份验证。

基本身份验证与明文和加密连接兼容。有关配置加密连接的更多信息,请参见启用TLS/SSL加密。

要为集群中的所有链接配置基本身份验证,请输入以下命令:

solace(...igure/routing/dynamic-message-routing)# cluster <cluster-name>
solace(...uting/dynamic-message-routing/cluster)# authentication
solace(...essage-routing/cluster/authentication)# basic

配置身份验证类型

要配置用于集群链接连接的基本身份验证类型,请输入以下命令:

solace(...-routing/cluster/authentication/basic)# auth-type {internal | none}

其中:

internal指定对集群链接连接进行本地配置的密码进行身份验证。

none指定不需要身份验证(换句话说,允许匿名登录)。

为基本内部身份验证配置密码

要为集群链接连接的基本内部身份验证配置密码,请输入以下命令:

solace(...-routing/cluster/authentication/basic)# password <password>

其中:

<password>是您希望用于验证传入集群链接(控制和数据通道)的密码。如果每个链接没有单独的密码,则此密码也用于所有传出链接。

使用客户端证书配置身份验证

客户端证书身份验证要求集群链接通过来自受认可的证书颁发机构(CA)的X509v3客户端证书向远程节点证明其身份。

要使用客户端证书身份验证,您必须配置集群链接在启动连接时向远程节点提供的客户端证书。发起链接连接的节点向远程节点提供其客户端证书;远程节点向发起节点提供其SSL服务器证书以进行客户端认证。每个节点可以配置一个每个集群的客户端证书,用作传出链接的凭据。每个集群只能配置一个客户端证书;不能在每个链接的基础上覆盖。此外,在使用客户端证书身份验证的集群链接时,您必须配置至少一个客户端证书匹配规则条件(请参见配置客户端证书匹配规则)。

客户端证书身份验证仅与加密连接兼容。有关配置加密连接的更多信息,请参见启用TLS/SSL加密。

要为集群中的所有链接配置客户端证书身份验证,请输入以下命令:

solace(...igure/routing/dynamic-message-routing)# cluster <cluster-name>
solace(...uting/dynamic-message-routing/cluster)# authentication
solace(...essage-routing/cluster/authentication)# client-certificate

配置要提供给远程节点的客户端证书文件锚

要配置要使用的证书文件,请输入以下命令:

solace(...ter/authentication/client-certificate)# certificate-file <file>

其中:

<file>指定用于验证所有集群链接(控制和数据通道)的证书文件。此证书在建立连接时由发起连接的节点提供给远程节点以进行身份验证。证书文件必须位于监禁目录中的certs目录中(请参见复制文件)。安装后,您可以删除certs目录中的文件。

配置客户端证书匹配规则锚

当您配置客户端证书匹配时,您为每个集群创建一组匹配规则。要接受客户端证书作为有效凭据,该证书必须至少匹配一个规则。每个规则包含一组一个或多个条件,所有条件必须满足才能使证书匹配该规则。每个条件将证书字段与与集群链接相关联的属性或固定的通配符表达式进行比较。

您还可以创建属性过滤器,以确保匹配规则仅适用于具有特定属性值的集群链接。例如,您可以标记某些集群链接带有span属性,然后创建一个规则,其中包含一个属性过滤器,检查span属性的值是否设置为internal,以及一个简单条件,允许这些链接与远程节点进行身份验证。

在使用客户端证书身份验证的集群链接时,您必须配置至少一个客户端证书匹配规则条件。

要配置客户端证书匹配规则,请输入以下命令:

solace(...ter/authentication/client-certificate)# matching rules
solace(...ion/client-certificate/matching-rules)# create rule <name>

要配置客户端证书匹配规则条件,请输入以下命令:

solace(...lient-certificate/matching-rules/rule)# create condition {certificate-thumbprint | common-name | common-name-last | subject-alternate-name-msupn | uid | uid-last | org-unit | org-unit-last | issuer | subject | serial-number | dns-name | ip-address} {{matches-attribute <attribute>} | {matches-expression <expression>}}

要配置客户端证书匹配规则属性过滤器,请输入以下命令:

solace(...lient-certificate/matching-rules/rule)# create attribute-filter <name>
solace(.../matching-rules/rule/attribute-filter)# name <value>
solace(.../matching-rules/rule/attribute-filter)# value <value>

要启用证书匹配规则,请输入以下CONFIG命令:

solace(...lient-certificate/matching-rules/rule)# no shutdown

默认情况下,客户端证书匹配是禁用的,任何其他有效的证书都会被接受。要启用客户端证书匹配,请输入以下CONFIG命令:

solace(...ion/client-certificate/matching-rules)# no shutdown

其中:

rule <name>指定证书匹配规则的名称。

certificate-thumbprint将证书指纹与指定的属性或通配符表达式进行比较。证书指纹是整个DER编码证书的SHA-1哈希,由代理在接收到客户端证书后计算。

common-name将客户端证书中CN的第一个实例与指定的属性或通配符表达式进行比较。

common-name-last将客户端证书中CN的最后一个实例与指定的属性或通配符表达式进行比较。

subject-alternative-name-msupn将客户端证书的SAN扩展中的msUPN(在otherName字段中)与指定的属性或通配符表达式进行比较。

uid将客户端证书中用户标识符(UID)属性的第一个实例与指定的属性或通配符表达式进行比较。

uid-last将客户端证书中UID属性的最后一个实例与指定的属性或通配符表达式进行比较。

org-unit将客户端证书中组织单位属性的第一个实例与指定的属性或通配符表达式进行比较。

org-unit-last将客户端证书中组织单位属性的最后一个实例与指定的属性或通配符表达式进行比较。

issuer将客户端证书中的发行者属性与指定的属性或通配符表达式进行比较。

subject将客户端证书中的主题属性与指定的属性或通配符表达式进行比较。

serial-number将客户端证书的序列号与指定的属性或通配符表达式进行比较。

dns-name将客户端证书的SAN扩展中的DNS名称与指定的属性或通配符表达式进行比较。

ip-address将客户端证书的SAN扩展中的IP地址与指定的属性或通配符表达式进行比较。

matches-attribute <attribute>指定用于比较的属性。

matches-expression <expression>指定用于比较的通配符表达式。该表达式直接与从证书中提取的字段进行比较,并可以包含通配符。

attribute-filter <name>指定属性过滤器的名称。

attribute <value>指定要测试的属性名称。

value <value>指定属性的预期值,以便应用证书匹配规则。

证书匹配规则在链接或集群重启之前没有效果。

内部链接的示例

内部链接可能具有统一的规则集,或最有可能是一个规则,该规则从客户端证书中提取节点名称并与携带节点名称的链接属性进行比较。针对内部链接的典型规则可能如下所示:

solace(...ion/client-certificate/matching-rules)# create rule internal
solace(...lient-certificate/matching-rules/rule)# create condition common-name matches-attribute nodeName
solace(...lient-certificate/matching-rules/rule)# no shutdown

这要求您还在集群链接上创建nodeName属性,更多信息,请参见设置集群链接属性。

外部链接的示例

外部链接可能连接到由不同组织管理的集群,具有不同的证书样式,因此可能需要更多配置,例如:

solace(...ion/client-certificate/matching-rules)# create rule external
solace(...lient-certificate/matching-rules/rule)# create condition issuer matches-attribute issuer
solace(...lient-certificate/matching-rules/rule)# create condition subject matches-attribute subject
solace(...lient-certificate/matching-rules/rule)# no shutdown

这要求您还在集群链接上创建issuersubject属性,更多信息,请参见设置集群链接属性。

区分内部和外部链接的规则

要为内部和外部链接应用不同的规则,您可以创建属性过滤器,以确保规则仅适用于具有特定属性值的链接。这使您能够为每个外部链接创建唯一的规则,仅在nodeName属性具有特定值时应用。

solace(...ion/client-certificate/matching-rules)# create rule internal
solace(...lient-certificate/matching-rules/rule)# create attribute-filter spanInternal
solace(.../matching-rules/rule/attribute-filter)# attribute span
solace(...rules/rule/attribute-filter/attribute)# value internal
solace(...rules/rule/attribute-filter/attribute)# exit
solace(.../matching-rules/rule/attribute-filter)# exit
solace(...lient-certificate/matching-rules/rule)# create condition common-name matches-attribute nodeName
solace(...lient-certificate/matching-rules/rule)# no shutdown
solace(...lient-certificate/matching-rules/rule)# exit
solace(...ion/client-certificate/matching-rules)# create rule external1
solace(...lient-certificate/matching-rules/rule)# create attribute-filter nodeName
solace(.../matching-rules/rule/attribute-filter)# attribute nodeName
solace(...rules/rule/attribute-filter/attribute)# value external-node-1
solace(...rules/rule/attribute-filter/attribute)# exit
solace(.../matching-rules/rule/attribute-filter)# exit
solace(...lient-certificate/matching-rules/rule)# create condition issuer matches-expression "CN=CA1, O=org1, ..."
solace(...lient-certificate/matching-rules/rule)# create condition subject matches-expression "CN=external-node-1, O=org1, ..."
solace(...lient-certificate/matching-rules/rule)# no shutdown

这要求您还在内部集群链接上创建spannodeName属性,并在外部集群链接上创建nodeName属性。更多信息,请参见设置集群链接属性。

启用TLS/SSL加密

在您能够为集群中的链接启用TLS/SSL加密之前,需要满足以下要求:

  • 必须在每个集群链接的两个节点上配置并启用TLS/SSL服务。这要求在接收加密连接的节点上配置TLS/SSL服务器证书。请参见管理服务器证书。

  • 配置客户端证书身份验证时,必须将用于标识发起加密连接的节点的客户端证书加载到节点上。请参见配置要提供给远程节点的客户端证书文件。

要配置TLS/SSL加密,请输入以下命令:

solace(...uting/dynamic-message-routing/cluster)# ssl
solace(...g/dynamic-message-routing/cluster/ssl)# server-certificate-validation

您可以执行的TLS/SSL配置任务包括:

  • 启用服务器名称验证
  • 配置最大证书链深度
  • 启用证书日期验证

当您更改DMR集群的服务器证书验证设置时,PubSub+代理会自动断开并重新连接集群中所有启用TLS的链接,以启用更改。

启用服务器名称验证

您可以启用或禁用TLS身份验证机制,以验证用于连接到远程代理的名称。如果启用,则用于该连接的服务器名称将与从远程代理返回的证书中的主题备用名称(SAN)扩展中的服务器名称进行验证。

服务器名称验证默认启用,并应在所有生产场景中保持启用。

要启用服务器名称验证:

solace(...g/dynamic-message-routing/cluster/ssl)# server-certificate-validation
solace(...ter/ssl/server-certificate-validation)# validate-server-name

要禁用服务器名称验证:

solace(...ter/ssl/server-certificate-validation)# no validate-server-name

配置最大证书链深度

您可以配置服务器证书链的最大允许深度。链的深度定义为从受信任的自签名根CA证书到当前证书的签名CA证书的数量。

要配置证书链的最大允许深度,请输入以下命令:

solace(...g/dynamic-message-routing/cluster/ssl)# server-certificate-validation
solace(...ter/ssl/server-certificate-validation)# max-certificate-chain-depth <max-depth>

其中:

<max-depth>指定证书链的最大允许深度。

启用证书日期验证

您可以启用或禁用对服务器证书中Not BeforeNot After有效日期的验证。当禁用时,即使证书在这些日期的基础上无效,证书也会被接受。

要启用证书日期验证:

solace(...g/dynamic-message-routing/cluster/ssl)# server-certificate-validation
solace(...ter/ssl/server-certificate-validation)# validate-certificate-date

要禁用证书日期验证:

solace(...ter/ssl/server-certificate-validation)# no validate-certificate-date