通道安全出口程序

您可以使用安全出口程序来验证通道另一端的合作伙伴是否真实。 这称为认证。 要指定某个通道必须使用安全出口,请在通道定义的 SCYEXIT 字段中指定出口名称。

注: 还可以使用通道认证记录来实现认证。 通道认证记录 在阻止某些用户和通道访问队列管理器以及将远程用户映射到 IBM® MQ 用户标识方面提供了极大的灵活性。 IBM MQ 还提供了 SSL 和 TLS 支持,以认证用户并为数据提供加密和数据完整性检查。 有关 SSL 和 TLS 的更多信息,请参阅 IBM MQ中的 SSL 和 TLS 安全协议。 但是,如果您仍需要更复杂(或其他)形式的安全处理以及其他类型的检查和安全上下文建立,请考虑编写安全出口。
对于在 IBM WebSphere® MQ 7.1 之前编写的安全出口,值得注意的是,先前版本的 IBM MQ 查询了底层安全套接字提供程序 (例如 IBM Global Security Kit (GSKit)) ,以确定远程合作伙伴的证书主体专有名称 (SSLPEER) 和签发者专有名称 (SSLCERTI)。 在 IBM WebSphere MQ 7.1 中,添加了对一系列新安全性属性的支持。 为了访问这些属性, IBM WebSphere MQ 7.1 会获取证书的 DER 编码,并使用它来确定主题和签发者 DN。 主题和颁发者 DN 属性显示在以下通道状态属性中:
  • SSLPEER(PCF 选择器 MQCACH_SSL_SHORT_PEER_NAME)
  • SSLCERTI(PCF 选择器 MQCACH_SSL_CERT_ISSUER_NAME)
这些值由通道状态命令返回,并且会列出传递到通道安全出口的数据,如下所示:
  • MQCD SSLPeerNamePtr
  • MQCXP SSLRemCertIssNamePtr
IBM WebSphere MQ 7.1中, SERIALNUMBER 属性还包含在主体集 DN 中,并且包含远程合作伙伴证书的序列号。 此外,某些 DN 属性的返回顺序与先前发行版的返回顺序不同。 因此,在先前发行版的 V 7.1 中更改了 SSLPEER 和 SSLCERTI 字段的组合,因此建议检查并更新依赖于这些字段的任何安全出口或应用程序。

通过通道定义的 SSLPEER 字段指定的现有 IBM MQ 对等名称过滤器不受影响,并且将继续以与先前发行版相同的方式运行。 这是因为 IBM MQ 对等名称匹配算法已更新为处理现有 SSLPEER 过滤器,而无需更改通道定义。 此更改最可能会影响依赖于 PCF 编程接口返回的主题 DN 和颁发者 DN 值的安全出口和应用程序。

可以使用 C 或 Java编写安全出口。

在 MCA 的处理周期中,通道安全出口程序在以下位置调用:
  • MCA 启动和终止时。
  • 通道启动时的初始数据协商完成后立即调用。 通过提供要发送到远端的安全出口的消息,通道的接收方端或服务器端可以启动与远端的安全消息交换。 此交换也可能会遭到拒绝。 出口程序将再次启动以处理从远端接收的任何安全消息。
  • 通道启动时的初始数据协商完成后立即调用。 通道的发送方端或请求方端处理从远端接收的安全消息,或在远端无法发送时启动安全交换。 出口程序将再次启动以处理可能会收到的所有后续安全消息。

永不会使用 MQXR_INIT_SEC 调用请求者通道。 通道先通知服务器具有安全出口程序,然后服务器才有可能启动安全出口。 如果通道没有安全出口程序,它会通知请求者并向出口程序返回零长度流。

注: 避免发送长度为零的安全消息。
图 1图 4中说明了安全出口程序交换的数据的示例。 这些示例显示了涉及接受方的安全出口以及发送方的安全出口时事件的发生顺序。 图中的连续行表示时间段。 在某些情况下,接收方和发送方的事件不相关,因此可能会同时发生,也可能在不同时间发生。 其他情况下,一个出口程序上的事件会导致另一个出口程序上稍后发生互补事件。 例如,在图 1中:
  1. 使用 MQXR_INIT 分别调用接收方和发送方,但这些调用不相关,因此可以同时发生,也可以不同时发生。
  2. 接下来使用 MQXR_INIT_SEC 调用接收方,但会返回不需要发送方出口发生互补事件的 MQXCC_OK。
  3. 接下来使用 MQXR_INIT_SEC 调用发送方。 此调用与使用 MQXR_INIT_SEC 的接收方调用不相关。 发送方返回 MQXCC_SEND_SEC_MSG,将导致接收方出口上发生互补事件。
  4. 然后,使用 MQXR_SEC_MSG 调用接收方,将返回导致发送方出口发生互补事件的 MQXCC_SEND_SEC_MSG。
  5. 然后使用 MQXR_SEC_MSG 调用发送方,将返回不需要接收方出口发生互补事件的 MQXCC_OK。
图 1。 发送方发起的使用协议交换
发送方发起的交换与协议。 前面的文本中描述了事件序列。
图 2。 发送方发起的无协议交换
发送方发起的无协议交换。 此序列与先前示例相同,直到使用 MQXR_SEC_MSG 调用发送方时为止,此时它使用 MQXCC_SUPPRESS_FUNCTION 进行响应,并且通道关闭。
图 3。 接收方发起的协议交换
接收方发起的与协议的交换。 首先调用接收方和发送方,然后使用发送方发起的交换作为响应。 接收方使用 MQXCC_SEND_SEC_MSG 作为响应。 然后使用 MQXR_TERM 调用发送方,并以 MQXCC_SEND_SEC_MSG 作为响应。 然后使用 MQXR_SEC_MSG 调用接收方,以 MQXCC_OK 作为响应。 消息传输开始。
图 4: 接收方发起的无协议交换
接收方发起的无协议交换。 使用 MQXR_SEC_MSG 调用接收方之前,此交换遵循上述示例。 它使用 MQXCC_SUPRESS_FUNCTION 进行响应,并且通道关闭。

将向通道安全出口程序传递包含安全数据的代理程序缓冲区,不包括安全出口生成的任何传输头。 此数据可以是任何合适的数据,以便通道的任何一端能执行安全验证。

消息通道的发送端和接收端上的安全出口程序可以将两个响应代码中的任意一个返回到任何调用:
  • 安全交换无错误结束
  • 禁止并关闭通道
注:
  1. 通道安全出口通常成对工作。 在定义相应的通道时,请确保为通道两端指定兼容的出口程序。
  2. IBM i 中,已使用 Use adopted authority (USEADPAUT = *YES) 编译的安全出口程序可以采用 QMQM 或 QMQMADM 权限。 请注意,该出口不使用此功能,以免对您的系统构成安全风险。
  3. 在 SSL 通道上(通道的另一端提供证书),安全出口接收通过 SSLPeerNamePtr 访问的 MQCD 字段中此证书主题的专有名称以及通过 SSLRemCertIssNamePtr 访问的 MQCXP 字段中颁发者的专有名称。 使用此名称可以:
    • 限制通过 SSL 通道进行访问。
    • 根据此名称更改 MQCD.MCAUserIdentifier。