加密Web应用程序的文件

问题描述:

我的任务是研究我们的Web服务器上加密客户端文件的加密功能。我们运行的是IIS7环境,当通过HTTPS从客户端传输文件时,我们希望以加密的方式将这些文件存储到磁盘中。我是一名网络工程师,软件开发人员已将此推向我,以找到操作系统实施。我已经看过BitLocker和EFS,但是我不明白为什么或者我会如何需要这一点,因为我们不关心有人从我们的安全数据中心窃取物理驱动器。这在IIS7的软件端会不会更容易?加密Web应用程序的文件

的选择是相当广泛:

  • DBMS带有内置存储的数据的OS”文件系统(NTFS)的
  • 加密功能的encyrption。 NTFS允许您使用存储在Windows证书存储区中的加密证书对单个文件进行加密。它是可导出的,因此您可以将其复制以备用。
  • 由第三方软件创建的虚拟磁盘(例如,TrueCrypt)。此类软件通常支持通过密码和证书或PGP密钥(取决于软件)进行加密
  • 由软件使用our Virtual Storage products之一创建的虚拟磁盘。这个选项对加密机制的选择几乎是无限的。
+0

谢谢大家的回复。我们决定使用TrueCrypt作为磁盘加密(因为BitLocker的TPM芯片有额外的硬件成本),SQL Server 2008上的TDE加密,当然还有通过HTTPS传输数据。 – hexLax 2011-06-10 15:13:05

HTTPS将从点到点加密数据。一旦到达服务器(并且您正在存储它),它就不加密。

要进一步加密,你有两个选择中的数据:无论是加密整个驱动器(BitLocker的/ EFS式)或加密单个文件,在这种情况下,(恕我直言)的最简单的解决办法是简单地存储文件,并使用数据库的内置或编程语言API的加密选项来加密和解密存储和检索文件。

加密整个驱动器的不利之处在于,您将在生产服务器上失去性能 - 通常是一件坏事。

.Net有一些很棒的API来加密文件。您可以在将所有文件存储到磁盘之前使用AES-256(在.Net C#中称为Rijndael)来加密所有文件。然后使用机器证书中的RSA密钥(C#中的X509Certficate2)对AES密钥进行加密。将加密的AES密钥(以及使用CBC时的初始化向量)与加密文件一起存储。

当您需要解密文件时,使用机器证书中的私钥解密AES密钥,然后使用该AES密钥解密文件的其余部分。

+0

这不会引入这样的警告,即文件只能在特定的机器上解密吗?从长远来看,将生产数据的可访问性链接到特定的服务器实例似乎是一个坏主意。 – colinross 2011-05-24 22:10:19