信息: MSMQ 的私有密钥和公钥的存储

适用于: Windows Server, version 2004, all editionsWindows Server, version 1903, all editionsWindows Server 2019, all editions

摘要


本文介绍 Microsoft 消息队列(MSMQ)用于消息身份验证和加密的私钥和公钥的存储。

更多信息


密钥对(公共-专用)驻留在加密 API (密钥容器对象)中。 应用程序不需要知道密钥容器的实现位置和方式。 密钥容器对象应为包含键且由已发布接口访问的不透明对象。基本加密服务提供程序(CSP)在注册表中实现密钥容器。 CSP 可以驻留在 HKEY_CURRENT_USER 或 HKEY_LOCAL_MACHINE 中。 该位置通过向 CryptAcquireContext 传递标志确定。 其他 Csp 可能会在其他位置(如智能卡)中实现密钥容器。 MSMQ 不会假定密钥位置的任何内容,并且始终使用加密 API,而不是直接与密钥一起使用。MSMQ 使用基本 CSP 对数据进行加密或解密。 尽管 CSP 的当前实现将私钥放在 HKLM\Software\Microsoft\Cryptography\MachineKeys\MSMQ 中,但这不应是任何应用程序的相关信息。对于身份验证,认为私钥和公钥位于证书中是一个常见错误。 证书是一条公共信息。 接收证书的人无关紧要。 但是,私钥是应该保留在尽可能安全的位置中的最重要信息片段。对于每个证书,应该有与之关联的一些密钥容器。 此密钥容器包含与证书关联的公钥和私钥。 公钥的副本也与其他许多信息片段一起放置在证书中。加密 API 还定义了一个称为证书存储的对象。 证书存储包含有关每个证书的证书和其他信息(例如,与证书相关联的密钥的相关信息)。 此信息是与证书以及与证书关联的特定密钥容器的证书和标识一起使用的特定 CSP 的标识。证书存储可以驻留在多个位置、注册表、文件、内存等。 MSMQ 将内部证书存储在 HKCU\Software\Microsoft\MSMQ\CertStore. 下的证书存储中。 关联的键位于 HKCU\Software\Microsoft\Cryptography\UserKeys\MSMQ. 中。 这些位置也不应与任何应用程序相关。 MSMQ 始终使用加密 API,从不直接与键本身一起使用。MSMQ 还将队列管理器(QM)的公钥存储在消息队列信息存储(MQIS)中。 应用程序可以通过使用 PROPID_QM_ENCRYPTION_PK 调用 MQGetMachineProperties ()来检索此公钥。 呼叫用户应在计算机上授予 "获取安全" 权限,以便成功检索计算机的公钥。 PROPID_QM_ENCRYPTION_PK 与所有其他属性不同,其中用户应具有计算机的 "获取权限" 权限。MSMQ 在内部使用此公共密钥来加密消息。 QM 从 MQIS 检索目标计算机的公钥。 由于在大多数情况下,QM 在本地系统帐户下运行,因此应将 "获取权限" 权限授予所有人;否则,QM 无法检索公钥,因此无法加密消息。

参考


有关加密、公钥加密和 Microsoft CryptoAPI 的详细信息,请参阅加密

有关 MSMQ 软件开发工具包(SDK)的信息,请参阅消息队列(MSMQ)