什么是安全的方式来允许任何Windows用户encryption文件,但只有特定的应用程序解密

我开发了一个从一个位置读取文本文件的服务。 某些文本文件可能包含敏感信息。 我们希望允许任何用户运行一个独立的工具来encryption这些文件,这样只有服务应用程序才能解密它。

我创build了一个MyServiceAccount.cer文件和一个passoword保护MyServiceAccount.pfx文件与我需要的公钥/私钥。 通过使用该帐户login到Windows,我已将MyServiceAccount.pfx导入到MyServiceAccount的个人存储中。 作为一个服务帐户login似乎很尴尬。

1)pipe理员有没有办法将.cer或.pfx文件导入到另一个用户的个人存储中?

我还创build了一个独立的工具,读取MyServiceAccount.cer文件以获取公钥并用它encryption一个或多个文件。 将.cer文件留给任何人使用,logging它的位置,希望没有人移动或删除它等等,似乎很尴尬。

2)是否有一个适当的Windowsapp store,我应该保留MyServiceAccount.cer,以便独立的应用程序可以获得公共密钥,无论运行它的用户login为哪个帐户?

由于MyServiceAccount.pfx存储在MySrviceAccount的个人存储中,因此我认为唯一可以获取私钥的帐户就是该帐户。 我知道一个pipe理员可以login为该帐户,所以我应该保护私钥,以便需要密码。 但..

3)服务应用程序如何访问密码保护的个人存储中的密钥而不将密码embedded代码中?

感谢您帮助我理解我的select,以及在这种情况下最佳做法。

在Windows中,用户的私钥存储受到称为DPAPI的系统的保护。 最终,私钥使用从用户密码(间接)派生​​的密钥进行encryption。 因此,即使pipe理员不能在没有input用户密码的情况下将私钥推入用户的私人存储区。

在你的情况下,更好的select可能是在“LocalMachine”存储中推送私钥和证书。 所有用户都可以读取该存储中的证书,但不能写入该证书。 而且,默认情况下,私钥访问仅限于pipe理员,但您可以修改这些访问权限。 尝试使用mmc.exe ,然后添加“证书”pipe理单元,select“本地计算机”。 这将允许您专门在LocalMachine“我的”商店中导入PFX文件。 然后,右键单击证书,不要select“属性”; 而是select“所有任务”,然后select“pipe理私钥”。 这将导致您更改私钥访问权限的GUI。 注意:“读取”访问权限足以将私钥用于encryption操作; 其他权利是关于删除或覆盖密钥。

如果您仍然希望将服务帐户的内容存储在DPAPI中,并由帐户的密码保护,则不必在服务代码中embedded密码。 相反,你在启动服务的系统中编写密码 – 对于services.msc中的“服务”,你有一个GUI。 因此,您在安装服务时input密码,其余部分是自动的。