gpt4 book ai didi

c# - 如何从 X509Store 加载受密码保护的证书?

转载 作者:IT王子 更新时间:2023-10-29 04:44:39 25 4
gpt4 key购买 nike

我正在构建一个受 ACS 保护的 Azure WCF 服务,该服务将要求客户端通过证书进行身份验证。

我希望客户端(和服务器)从 X509Store 而不是从文件系统加载它们各自的密码证书。

我正在使用这段代码:

private static X509Certificate2 GetCertificate(string thumbprint)
{
var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint,
thumbprint, false);

certStore.Close();

if (certCollection.Count == 0)
{
throw new System.Security.SecurityException(string.Format(CultureInfo.InvariantCulture, "No certificate was found for thumbprint {0}", thumbprint));
}

return certCollection[0];
}

问题是,它没有加载身份验证所需的私钥。我试图将返回语句修改为:

return new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, "password"));

但是,这会因 CryptographicException“指定的网络密码不正确”而失败。

编辑:如果您不传入密码参数,.Export() 方法可以正常工作。

有什么帮助吗?

最佳答案

导出时,您提供的密码是您要用于导出文件的密码,而不是源证书的密码。

我不确定您可以使用 X509Store 和受密码保护的证书做什么,因为应该将密码提供给 X509Certificate 构造函数,并且您会从存储中获取已经实例化的对象。

认为您可以只从您想要的证书中获取原始数据,然后使用您想要的密码构建一个新数据。例如:

X509Certificate2 cert = new X509Certificate2(certCollection[0].GetRawCertData, password);

我还建议您在处理密码时尝试使用 SecureString(但那是另一回事......)

关于c# - 如何从 X509Store 加载受密码保护的证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399156/

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