2015-12-17 16 views
5

我的项目需要保留所有数据的加密,所以MSMQ也需要加密。但是从文章(https://msdn.microsoft.com/en-us/library/ms704178(v=vs.85).aspx)中可知,来自专用队列的消息默认存储在... \ MSMQ \ Storage \ p000000x.mq文件中。MSMQ。当邮件存储在驱动器上时保持邮件正文加密

当我配置专用队列,将其隐私级别设置为“正文”,并且当我发送加密消息到此队列时,然后打开文本查看器中的... \ MSMQ \ Storage \ p000000x.mq文件(我使用远管理器十六进制编辑器),我看到纯文本的消息。它没有加密。要发送消息我用下面的代码:

message.UseEncryption = true; 
message.EncryptionAlgorithm = EncryptionAlgorithm.Rc2; 

消息... \ MSMQ \存储\ p000000x.mq保持平淡,尽管指定的信息加密。看下面的图片。

enter image description here 所以我的问题:是否有一些内置的工具,以保持在... \ MSMQ \存储\ p000000x.mq文件的驱动器加密的消息?或者我需要在发送到队列之前加密邮件正文,然后,当从队列中偷看时,我需要解密它?

非常感谢!

回答

4

是的,您需要在将数据放入消息前加密数据,然后在读取消息后解密数据。

“的数据使用应用程序加密” http://blogs.msdn.com/b/johnbreakwell/archive/2008/09/12/sending-encrypted-msmq-messages.aspx

+1

谢谢,约翰。我之前读过你的文章,但决定提出一个问题,以确保在msmq之前应该再次加密消息数据。所有这些都是在项目的FIPS合规实施中完成的。 –

+0

我认为加密存储是那些很好的功能之一,但涉及MSMQ设计的主要(即昂贵的)更改。 –

1

由于Microsoft Windows支持多个用户†通过NTFS Encrypting File System(EFS)文件夹加密,我能够利用这种透明的加密机制,支持MSMQ加密存储文件夹,因此可最大限度地减少用户访问文件内部数据的表面积,这些文件包含邮件正文和* .mq文件中其他可读文本片段。

该解决方案是一个备选我发明了专用队列(没有域集成)来透明地加密,并没有由应用诉诸Application-Encrypted Messages或定制加密。它实际上会影响系统上的所有队列,因为MSMQ实例的整个存储位置都已加密。

此解决方案继续允许使用MSMQ管理单元查看已分配权限的用户在队列中的消息,而不会在查看器中看到乱码或加密文本。

请注意,此解决方案要求你作一个新的存储位置上 磁盘的MSMQ,因为我试图加密和 转换的默认存储位置是在Windows/System32下,当有问题。 如果您发现一种方法可以使此解决方案无需创建新的 文件夹,请在评论中发帖。

这些都是我需要做一个透明加密MSMQ解决方案EFS技术工作的步骤:
(此信息假设你知道在哪里可以找到你的消息队列管理器来配置与服务,以及如何开展其他一些基本的Windows管理任务,或者找出如何做到这一点)

  1. 登录到机器的管理员(假设消息队列服务已经安装,如果没有的话,从风安装行程和功能)。

  2. 请注意消息队列服务正在运行的用户帐户(即网络服务)。您需要在以下步骤中执行此操作...

  3. 在磁盘上为msmq创建备用存储文件夹,例如C:\ msmq-storage

  4. 将您的管理员用户分配给具有完全控制权限的新文件夹。

  5. 也为该文件夹分配服务用户帐户(在步骤2中注明,例如网络服务)完全控制权限。
    这是一个非常重要的步骤,因为它给该消息的文件。的加密内容MSMQ服务用户帐户访问)

  6. 加密通过转到其属性和使加密复选框的文件夹。该文件夹现在已加密并可能以不同的颜色显示。
    您可以通过登录的计算机上的其他用户,并试图访问加密文件的内容,从而导致测试这种“拒绝访问”的消息。

  7. 现在使用MSMQ经理将其存储位置(全部)重新指向刚刚在磁盘上创建的新加密文件夹(并远离默认或当前的存储位置)。更改将提示您重新启动服务。说是的。

如果您发现此解决方案的任何问题,请在这里发表评论。谢谢。

我通过写和使用this article about how to write a bare minimum message queue app提出了一个基本的.NET应用程序从队列中读取测试了Win 7的工作站&的Windows 2008 R2服务器上的这一解决方案。

+1

这种方法简化了数据的安全性。在生产中,性能可能会受到影响,因此建议进行负载测试以及功能测试。 –