C# X509Certificate2:私钥存储在哪里?

C# X509Certificate2: Where to store the private key?

我有一个自托管的 WCF 应用程序,它充当服务器,我想 install/deploy 它在 Windows 机器上。

该应用程序使用我使用 makecert.exe 创建的自签名证书。因此,PFX、CER 和 PVK 就在那里并且可用。一切正常。

目前仅用于测试,应用程序从嵌入式资源中读取证书和私钥。这意味着两者都被编译到应用程序中,这是一个很高的安全风险。

我已经知道,存储此数据的最常见方式是 windows 证书存储。我也知道如何保存和读取 windows 证书存储。

但是有些事情我还是没明白:

我在哪里存储证书 (CER) 的私钥 (PVK),以便我的应用程序能够使用 CER?

我的意思是,如果我的应用程序可以读取它,那么有权访问这台机器的任何人都可以读取它。或者这是错误的?

我需要自己照顾自己还是 windows 机器有任何 "industry standard" 来保存和读取 PVK?

Windows证书存储是最常见的存储证书(即CA)或带有私钥的证书(终端实体)的地方。

如果您将证书(带有私钥 - PFX)存储在 LocalMachine\My 存储中,那么您可以分配权限给谁(什么帐户)可以访问私钥。它是通过 certlm.msc 工具完成的。系统帐户默认具有访问权限,因此任何系统服务都可以使用私钥。

还有其他存储私钥的方式(如智能卡、HSM、网络 HSM 等)和其他访问私钥的方式(如 PKCS#11)。