我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些XML,然后再将其发送给他们.我在C#中以编程方式这样做,但我认为这是一个权限或配置错误的问题,因此我将重点关注似乎最相关的事实:
X509Certificate2.HasPrivateKey.但是,尝试读取密钥会导致错误.在.NET中,CryptographicException在尝试访问该属性时抛出消息"指定了无效的提供程序类型" X509Certificate2.PrivateKey.在Win32中,调用该方法CryptAcquireCertificatePrivateKey返回等效的HRESULT , NTE_BAD_PROV_TYPE.与我的同事不同,我之前曾多次尝试以各种方式卸载和重新安装证书,包括通过IIS管理器,还包括来自同一发行人的旧证书.我在MMC中看不到任何旧证书或重复证书的痕迹.但是,我确实有许多相同大小的私钥文件,基于最后写入时间,在我的各种安装尝试后必须留下.这些位于以下位置,分别用于本地计算机和当前用户存储:
C:\ ProgramData \微软\加密\ RSA\MachineKeys的
c:\ Users \\ AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21- [其余用户ID]
所以,任何人都可以建议是否:
更新 - 添加了一个代码示例,显示尝试读取私钥:
static void Main()
{
// Exception occurs when trying to read the private key after loading certificate from here:
X509Store store = new X509Store("MY", StoreLocation.LocalMachine);
// Exception does not occur if certificate was installed to, and …Run Code Online (Sandbox Code Playgroud)