MSMQ。将消息正文存储在驱动器上时对其进行加密
Posted
技术标签:
【中文标题】MSMQ。将消息正文存储在驱动器上时对其进行加密【英文标题】:MSMQ. Keep message body encrypted while it is stored on drive 【发布时间】:2016-03-23 22:07:48 【问题描述】:我的项目要求对所有数据进行加密,因此 MSMQ 也需要加密。但正如文章 (https://msdn.microsoft.com/en-us/library/ms704178(v=vs.85).aspx) 中所知,来自私有队列的消息默认存储在 …\MSMQ\Storage\p000000x.mq 文件中。
当我配置私有队列时,将其隐私级别设置为“Body”,当我将加密消息发送到此队列时,我在文本查看器中打开 ...\MSMQ\Storage\p000000x.mq 文件(我使用 Far Manager hex redactor),我看到消息的纯文本。它没有加密。要发送消息,我使用下一个代码:
message.UseEncryption = true;
message.EncryptionAlgorithm = EncryptionAlgorithm.Rc2;
消息…\MSMQ\Storage\p000000x.mq 保持简单,尽管指定了消息加密。见下图。
所以我的问题是:是否有一些内置工具可以在 ...\MSMQ\Storage\p000000x.mq 文件中的驱动器上保持消息加密?或者我需要在发送到队列之前加密消息体,然后,当从队列中窥视时,我需要解密它?
非常感谢!
【问题讨论】:
【参考方案1】:因为 Microsoft Windows 通过 NTFS Encrypting File System (EFS) 支持多个用户的文件夹加密†,所以我能够利用这种透明的加密机制来支持 MSMQ 存储文件夹的加密,从而最大限度地减少用户访问数据的表面积在 *.mq 文件中包含消息正文和其他可读文本片段的内部文件。
此解决方案是我为私有队列(没有域集成)设计的一种替代方案,可以透明地加密,无需借助 Application-Encrypted Messages 或应用程序的自定义加密。它实际上会影响系统上的所有队列,因为 MSMQ 实例的整个存储位置都是加密的。
此解决方案继续允许使用 MSMQ 管理单元为已分配权限的用户查看队列中的消息,而不会在查看器中看到乱码或加密文本。
请注意,此解决方案要求您在 MSMQ 的磁盘,因为我在尝试加密和 转换 Windows/System32 下的默认存储位置。 如果您找到一种方法来使此解决方案工作而无需创建新的 文件夹请张贴在 cmets 中。
这些是我使 EFS 技术适用于透明加密的 MSMQ 解决方案的步骤:(此信息假设您知道在哪里可以找到您的消息队列管理器来配置服务,以及如何执行一些其他基本的 Windows 管理任务或了解如何执行此操作)
以管理员身份登录机器(假设消息队列服务已安装,如果未安装,则从 Windows 程序和功能安装)。
记下运行消息队列服务的用户帐户(即网络服务)。您将在接下来的步骤中需要它...
在磁盘上为 msmq 创建一个备用存储文件夹,例如C:\msmq-存储
将您的管理员用户分配到具有完全控制权限的新文件夹。
还为该文件夹分配服务用户帐户(在步骤 2 中注明,例如网络服务)完全控制权限。 (这是一个非常重要的步骤,因为它使 MSMQ 服务用户帐户可以访问消息文件的加密内容。)
通过转到文件夹属性并启用加密复选框来加密文件夹。该文件夹现已加密,可能会以不同的颜色显示。 (您可以通过在机器上以其他用户身份登录并尝试访问加密文件的内容来测试这一点,从而导致“访问被拒绝”消息。)
现在使用 MSMQ 管理器将其存储位置(所有这些位置)重新指向您刚刚在磁盘上创建的新加密文件夹(并远离默认或当前存储位置,无论它可能在哪里)。更改将提示您重新启动服务。说是。
如果您发现此解决方案有任何问题,请在 cmets 中发布。谢谢你。
† 我在 Win 7 工作站和 Windows 2008 R2 服务器上测试了这个解决方案,方法是使用this article about how to write a bare minimum message queue app 中概述的基本 .NET 应用程序写入和读取队列。
【讨论】:
这种方法简化了保持数据安全的过程。在生产中,性能可能会受到影响,因此建议进行负载测试和功能测试。【参考方案2】:是的,您需要在将数据放入消息之前对其进行加密,然后在阅读消息后解密数据。
“对数据使用应用程序加密” http://blogs.msdn.com/b/johnbreakwell/archive/2008/09/12/sending-encrypted-msmq-messages.aspx
【讨论】:
谢谢你,约翰。我之前读过你的文章,但决定再问一个问题,以确保在 msmq 之前再次加密消息数据。所有这些都是在项目的 FIPS 合规性实施中完成的。 我认为加密存储是其中一项很好的功能,但涉及对 MSMQ 设计的重大(即昂贵)更改。以上是关于MSMQ。将消息正文存储在驱动器上时对其进行加密的主要内容,如果未能解决你的问题,请参考以下文章