我们可以重复使用 WebSphere MQ TLS/SSL 证书吗?
Can we reuse WebSphere MQ TLS/SSL certificate?
比方说,我在 host1 中使用了队列管理器 QMGR1 创建了一个 CSR 并获得了一个标有 ibmwebspheremqqmgr1 的 CA 验证证书。我可以在另一个主机 host2 中使用相同的证书(及其根和中间链)来管理名为相同的队列(即 QMGR1)吗?换句话说,当我们 'receive' 使用 rumqakm 或不使用证书时,需要存在 certreq?我们可以 'add' 一个证书吗(就像我们做链一样)?如果问题不清楚,请询问,我可以提供更多详细信息。在我的例子中,host2 是生产环境。 host1 是我们测试连接性的 QA 环境。谢谢
根据评论更新问题 26DEC16
具体到 MQ,我想我必须先在 host2 上加载 CSR,然后再接收 CER,对吧?我想知道如何在不创建 CSR 的情况下 'load' CSR。我在 runmqakm 中看到一个重新创建它的选项,以前从未使用过,不确定是否可行。
TL;DR: 是的。
当您使用 IBM GSKit(例如 runmqakm
)创建 CSR 时,结果是未签名的证书和 CSR 文件本身。 CSR 以加密方式绑定到保留在密钥库的 .rdb
文件中的未签名证书。此时无法将已签名的 CSR 接收到任何密钥库中。
当您收到已签名的 CSR 时,它会与未决的未签名证书合并并移动到密钥库的 .kbd
文件中。此时它是一个有效的个人证书,带有您指定的标签名称(ibmwebspheremqqmgr1
在本例中)和您指定的 DN。
完成后,您将获得可用的个人证书。如果您想在另一个 QMgr 上使用它,您需要通过以下两种方式之一将该证书提供给另一个 QMgr:
- 复制构成密钥库的文件集。
- 将个人证书导出到一个文件,然后将该文件导入到其他 QMgr 的密钥库中。
如果您复制了整个密钥库并且另一个 QMgr 也被命名为 QMGR1
那么您可以立即使用它们。如果另一个 QMgr 有不同的名称,那么您必须将证书重命名为 ibmwebspheremqqmgr1
以外的名称,或者在现代 QMgr 中将 QMgr 的 CERTLABL
属性设置为 ibmwebspheremqqmgr1
。通常,您希望证书标签反映使用它的 QMgr 的名称,因此不建议使用名为 QMGR2
且 CERTLABL
为 ibmwebspheremqqmgr1
的 QMgr。
如果导入证书,则可以在导入命令期间设置标签。
请记住,标签和专有名称是两个完全不同且不相关的事物。专有名称是 CA 验证和签署的值,并以加密方式绑定到证书中的密钥。这是远程连接伙伴决定是否信任的事情。
标签是本地 QMgr 或客户端如何找到自己的证书。假设您创建了两个个人证书,QMgr 需要知道发送哪一个。它通过将证书的标签与 ibmwebspheremq[qmgr name in lower case]
的预期值匹配或与 QMgr 的 CERTLABL
属性相匹配(如果它不为空)来找到正确的。
这就是可以使用 GSKit 命令轻松更改证书标签但专有名称不可变的原因。
考虑到这一点,请注意外部和许多内部 CA 将期望证书的证书通用名称包含将使用证书的完全限定主机名。 HTTPS 客户端在连接时检查证书 CN 是否与主机名匹配。对于 MQ 连接,情况并非如此。您可以将您的 CA 将签署的任何内容放入 CN,并在任意名称的 QMgr 上使用它。所以你的证书可以有 CN=QMGR1
并且 QMgr 可以在 mqhost.yourcompany.com
上存在并且 MQ 喜欢它就好了。但是,使用新 MQ REST 的客户端 API 不会! 对于希望使用新 MQ REST API 的人来说,这是一个重要的区别。
最后,请注意,最佳做法是在将使用它们的地方生成证书,使用文件系统权限保护它们,将它们保存在本地存储中,并且永远不要从该位置复制或移动它们。 Public/Private key crypto 的发明是为了解决安全交换私钥这一非常困难的问题。如果个人证书被复制,它首先会破坏使用它们的目的。
各种商业 PKI 包(即 IBM Tivoli Key Lifecycle Manager、Venafi 等)都使用 FIPS 认证算法解决了这个问题,这些算法不在磁盘上存储密钥或加密原语,安全擦除内存space 在释放它之前,通常要格外小心,不要让密钥在传输、磁盘或内存中不受保护。如果您必须四处复制个人证书,请使用专为此目的而设计的真实 PKI 包(如果公司有的话)。否则,使用非常长且随机的密码将它们导出到 .p12
,并避免使用电子邮件、FTP 或其他不安全的方式来复制文件。
比方说,我在 host1 中使用了队列管理器 QMGR1 创建了一个 CSR 并获得了一个标有 ibmwebspheremqqmgr1 的 CA 验证证书。我可以在另一个主机 host2 中使用相同的证书(及其根和中间链)来管理名为相同的队列(即 QMGR1)吗?换句话说,当我们 'receive' 使用 rumqakm 或不使用证书时,需要存在 certreq?我们可以 'add' 一个证书吗(就像我们做链一样)?如果问题不清楚,请询问,我可以提供更多详细信息。在我的例子中,host2 是生产环境。 host1 是我们测试连接性的 QA 环境。谢谢
根据评论更新问题 26DEC16
具体到 MQ,我想我必须先在 host2 上加载 CSR,然后再接收 CER,对吧?我想知道如何在不创建 CSR 的情况下 'load' CSR。我在 runmqakm 中看到一个重新创建它的选项,以前从未使用过,不确定是否可行。
TL;DR: 是的。
当您使用 IBM GSKit(例如 runmqakm
)创建 CSR 时,结果是未签名的证书和 CSR 文件本身。 CSR 以加密方式绑定到保留在密钥库的 .rdb
文件中的未签名证书。此时无法将已签名的 CSR 接收到任何密钥库中。
当您收到已签名的 CSR 时,它会与未决的未签名证书合并并移动到密钥库的 .kbd
文件中。此时它是一个有效的个人证书,带有您指定的标签名称(ibmwebspheremqqmgr1
在本例中)和您指定的 DN。
完成后,您将获得可用的个人证书。如果您想在另一个 QMgr 上使用它,您需要通过以下两种方式之一将该证书提供给另一个 QMgr:
- 复制构成密钥库的文件集。
- 将个人证书导出到一个文件,然后将该文件导入到其他 QMgr 的密钥库中。
如果您复制了整个密钥库并且另一个 QMgr 也被命名为 QMGR1
那么您可以立即使用它们。如果另一个 QMgr 有不同的名称,那么您必须将证书重命名为 ibmwebspheremqqmgr1
以外的名称,或者在现代 QMgr 中将 QMgr 的 CERTLABL
属性设置为 ibmwebspheremqqmgr1
。通常,您希望证书标签反映使用它的 QMgr 的名称,因此不建议使用名为 QMGR2
且 CERTLABL
为 ibmwebspheremqqmgr1
的 QMgr。
如果导入证书,则可以在导入命令期间设置标签。
请记住,标签和专有名称是两个完全不同且不相关的事物。专有名称是 CA 验证和签署的值,并以加密方式绑定到证书中的密钥。这是远程连接伙伴决定是否信任的事情。
标签是本地 QMgr 或客户端如何找到自己的证书。假设您创建了两个个人证书,QMgr 需要知道发送哪一个。它通过将证书的标签与 ibmwebspheremq[qmgr name in lower case]
的预期值匹配或与 QMgr 的 CERTLABL
属性相匹配(如果它不为空)来找到正确的。
这就是可以使用 GSKit 命令轻松更改证书标签但专有名称不可变的原因。
考虑到这一点,请注意外部和许多内部 CA 将期望证书的证书通用名称包含将使用证书的完全限定主机名。 HTTPS 客户端在连接时检查证书 CN 是否与主机名匹配。对于 MQ 连接,情况并非如此。您可以将您的 CA 将签署的任何内容放入 CN,并在任意名称的 QMgr 上使用它。所以你的证书可以有 CN=QMGR1
并且 QMgr 可以在 mqhost.yourcompany.com
上存在并且 MQ 喜欢它就好了。但是,使用新 MQ REST 的客户端 API 不会! 对于希望使用新 MQ REST API 的人来说,这是一个重要的区别。
最后,请注意,最佳做法是在将使用它们的地方生成证书,使用文件系统权限保护它们,将它们保存在本地存储中,并且永远不要从该位置复制或移动它们。 Public/Private key crypto 的发明是为了解决安全交换私钥这一非常困难的问题。如果个人证书被复制,它首先会破坏使用它们的目的。
各种商业 PKI 包(即 IBM Tivoli Key Lifecycle Manager、Venafi 等)都使用 FIPS 认证算法解决了这个问题,这些算法不在磁盘上存储密钥或加密原语,安全擦除内存space 在释放它之前,通常要格外小心,不要让密钥在传输、磁盘或内存中不受保护。如果您必须四处复制个人证书,请使用专为此目的而设计的真实 PKI 包(如果公司有的话)。否则,使用非常长且随机的密码将它们导出到 .p12
,并避免使用电子邮件、FTP 或其他不安全的方式来复制文件。