我开发了一项从某个位置读取文本文件的服务。一些文本文件可能包含敏感信息。我们希望允许任何用户运行独立工具来加密文件,以便只有服务应用程序才能解密。
我已经创建了一个 MyServiceAccount.cer 文件和一个受密码保护的 MyServiceAccount.pfx 文件,其中包含我需要的公钥/私钥。我已使用该帐户登录 Windows,将 MyServiceAccount.pfx 导入到 MyServiceAccount 的个人存储中。必须以服务帐户身份登录似乎很尴尬。
1) 管理员有没有办法将 .cer 或 .pfx 文件导入到另一个用户的个人存储中?
我还创建了一个独立工具,它可以读取 MyServiceAccount.cer 文件以获取公钥并用它加密一个或多个文件。让 .cer 文件可供任何人使用、记录它的位置、希望没有人移动或删除它等,这似乎很尴尬。
2)是否有一个合适的 Windows 商店,我应该在其中保存 MyServiceAccount.cer,以便独立应用程序可以获取公钥,而不管运行它的用户以哪个帐户登录?
由于 MyServiceAccount.pfx 存储在 MySrviceAccount 的个人存储中,我假设唯一可以获取私钥的帐户就是该帐户。我知道管理员可以以该帐户身份登录,所以我应该保护私钥,以便需要密码。但是……
3)服务应用程序如何才能访问个人存储中受密码保护的密钥,而无需在代码中嵌入密码?
感谢您帮助我了解我有哪些选择,以及在这种情况下最佳做法是什么。
答案1
在 Windows 中,用户的私钥存储受到名为数据处理应用程序接口最终,私钥将使用从用户密码(间接)派生的密钥进行加密。因此,即使是管理员,如果不输入用户的密码,也无法将私钥推送到用户的私人存储中。
在您的案例中,更好的选择可能是将私钥和证书推送到“LocalMachine”存储中。所有用户都可以读取该存储中的证书,但不能写入。此外,默认情况下,私钥访问权限仅限于管理员,但您可以修改这些访问权限。尝试使用mmc.exe
,然后添加“证书”管理单元,选择“本地计算机”。这将允许您专门在 LocalMachine“我的”存储中导入 PFX 文件。然后,右键单击证书,执行不是选择“属性”;相反,选择“所有任务”,然后选择“管理私钥”。这将引导您进入用于更改私钥访问权限的 GUI。注意:“读取”访问权限足以使用私钥进行加密操作;其他权限是关于删除或覆盖密钥。
如果您仍想将服务帐户的信息存储在 DPAPI 中,从而通过帐户密码进行保护,则不必将密码嵌入服务代码中。相反,您可以在启动服务的系统中写入密码 - 对于“服务”,您services.msc
有一个 GUI。因此,您可以在安装服务时输入密码,但其余操作都是自动的。