加载私钥而不保存本地私钥信息

时间:2016-11-08 10:38:34

标签: c# wcf ssl-certificate

也许标题有点令人困惑,但我试着解释我的问题。

我的软件通过WCF向我的服务器发送一些信息。使用TransportWithMessageCredential保护传输,并使用ClientCredentialType的证书。证书是一个.pfx文件,它作为资源嵌入到项目中。

直到现在我直接使用嵌入式证书加载X509Certificate2:

X509Certificate2 certificate = new X509Certificate2(Resources.ClientCertificate);

一切正常。但现在客户有一个问题,即证书无法加载。我发现,当我从上面调用构造函数时,.NET会在"%APPDATA%\ Microsoft \ Crypto \ Keys"下创建一个私钥文件。 客户使用终端服务器,用户没有用户配置文件。

现在我的主要问题是:

有没有办法在不创建私钥文件的情况下加载证书?我知道我可以使用X509KeyStorageFlags将位置更改为机器密钥集。但这不是一种选择,因为用户无权访问此位置。

到目前为止我做了什么:

我使用

将私钥导出为XML
File.WriteAllText(keyFile, certificate.PrivateKey.ToXmlString(true));

在客户端我创建了一个没有私钥的X509Certificate2并从XML导入了私钥

RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(File.ReadAllText(keyFile));
certificate.PrivateKey = provider;

一切正常但当我尝试联系WCF服务器时出现错误"密钥不存在。"

有人知道我的问题的解决方案吗?

0 个答案:

没有答案