虚拟机中有一个工作进程,它必须处理客户端发送的文件,并将结果存储在数据库中。我们不希望这个虚拟机(因此,工作进程)直接面对Internet。客户端将这些文件发送到中间云存储,然后当有几个文件时,工作人员会批量处理这些文件。这意味着这些文件可能在不确定的时间内存放在云存储中。我的要求之一是,文件必须是加密的,而在rest,在这个存储中。我们使用存储作为服务,我们没有对它的控制(其他的要求是我们不应该绑定到云提供商,所以云提供商特定的解决方案不会做这个工作)。
我们希望遵循的方法是使用与工作进程共享的密钥(对称加密)在客户端对它们进行加密。它们将被加密,直到工作进程从存储中取出它们并使用共享密钥对它们进行解密。
我们希望在客户端和虚拟机上都使用.Net Core2.0数据保护框架,并且需要在此工作进程和客户端之间共享密钥。通过阅读文档,我看到我们可以使用Redis密钥存储提供程序,但是我理解这个用例就是在不同的应用服务器之间共享密钥。另外,我不确定将密钥存储在面向Redis实例的Internet中是个好主意(因为这会增加攻击面)。
因此,问题是,如何能够安全地共享工作进程和客户端之间生成的数据保护框架?。
注意:还有另一个组件,web服务器,它将面向Internet并将与虚拟机进行直接通信,但由于上述原因,该虚拟机不会直接面向Internet。我们可以使用此web服务器来通信工作进程和客户端,但不确定是否有更好的方法。
发布于 2018-01-09 14:15:20
我觉得你把事情搞得太复杂了。除非对客户端上的文件进行加密是必需的(您没有这么说),否则您不必加密。
通过HTTPS将客户端的文件发送到服务器,对服务器上的文件进行加密,然后将它们发送到存储区。
这样,您就不需要共享任何东西,服务器将控制整个进程,并且您可以选择以任意方式保存加密密钥。
如果需要对客户端上的文件进行加密,则在客户端对它们进行加密,将它们发送到服务器,通过HTTPS将加密密钥发送给服务器,以任意方式在服务器上存储密钥,然后将它们发送到存储区。
注意:我不认为.NET核心数据保护是您的场景的最佳选择。直接使用AES加密要容易得多。
https://stackoverflow.com/questions/48169996
复制相似问题