gpt4 book ai didi

c# - 在哪里存储 Windows 服务的 X509 证书?

转载 作者:可可西里 更新时间:2023-11-01 09:31:47 26 4
gpt4 key购买 nike

我有一个通常使用本地系统帐户运行的 Windows 服务(尽管在某些安装中它可能作为特定用户帐户运行)。

该服务使用 WCF,并使用 X509 证书保护通信。

我的问题是,存储证书(和私钥)的最佳位置在哪里?

如果使用证书存储是最好的方法,我应该使用哪种方法来确保只有管理员和服务才能访问私钥?

或者,一个简单的选择是将两者作为 PFX 文件简单地存储在磁盘上,并使用 ACL 确保只有管理员和服务可以访问它。与使用证书存储相比,这种方法的优缺点是什么?

编辑澄清一下,我将 C# 与 .NET Framework 3.5 结合使用

最佳答案

首先,我建议您将证书保存在证书存储中,并将私钥保存为不可导出。现在一些争论。

有多种方法可以在机器上保存私有(private) secret 或其他私有(private)信息。最古老的方法是 LsaStorePrivateDataLsaRetrievePrivateData API(参见 http://msdn.microsoft.com/en-us/library/ms721818%28VS.85%29.aspx)。它对 secret 的数量有限制,但所有 secret 都可以分为本地、全局和机器。

下一个方法是使用 DPAPI(参见 http://msdn.microsoft.com/en-us/library/ms995355.aspx):CryptProtectDataCryptUnprotectData 在我们的例子中。

我添加了对这两种方式的引用,因为您想比较不同的可能方式以确保您的方式最适合您的任务。

我认为您应该问的最重要的问题是:保护私钥的最佳方式是什么?我认为你应该选择保护你的 key 不被复制的方式。所以我建议你使用证书存储。在证书存储中,您可以保存标记为不可导出 的私钥。这是我认为的主要优势。您可以通过不同的方式使用相应的私钥部署证书。确保保存在机器上的私钥未标记为可导出

使用磁盘上的 PFX 文件不会给您带来这种优势。此外,要么您的 PFX 未加密,要么您收到应将密码保存到 PFX 文件的位置的问题。所以你必须使用 DPAPI(CryptProtectDataCryptUnprotectData)或 LSA API(LsaStorePrivateDataLsaRetrievePrivateData)和密码可以导出。

关于c# - 在哪里存储 Windows 服务的 X509 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com