未定义键集[重复]
Posted
技术标签:
【中文标题】未定义键集[重复]【英文标题】:The keyset is not defined [duplicate] 【发布时间】:2017-11-22 10:05:56 【问题描述】:我正在通过 C# .NET 构建一个用于文档签名的应用程序(win 表单)。我在签名时遇到了错误。当我在某些计算机(Windows 7、Windows 10,不在 Windows Server 中)上签署文档时,出现错误:“未定义密钥集”。
那么,有人可以指导或建议我如何解决这个问题?非常感谢!
这是我的代码:
// get certficate
public X509Certificate2 LoadCertificateFromWindowsStore()
X509Store x509Store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
x509Store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection numberCerts = (X509Certificate2Collection)x509Store.Certificates;
X509Certificate2Enumerator certEnumerator;
if (numberCerts.Count == 1)
certEnumerator = numberCerts.GetEnumerator();
while (certEnumerator.MoveNext())
return certEnumerator.Current;
return null;
else if (numberCerts.Count > 1)
X509Certificate2Collection chooseCert = X509Certificate2UI.SelectFromCollection(numberCerts,
"Certificates List", "Choose your certificate", X509SelectionFlag.SingleSelection);
if (chooseCert.Count == 1)
return chooseCert[0];
else
return null;
else
return null;
catch (CryptographicException e)
Console.WriteLine(e.Message);
finally
x509Store.Close();
return null;
// using the cert to sign
var cert = LoadCertificateFromWindowsStore();
if (cert.HasPrivateKey) // WORKS!!!
signedXml.SigningKey = cert.PrivateKey; // THROW "keyset does not exist" EXCEPTION
...
【问题讨论】:
这不是建议问题的重复。 “Keyset 不存在”和“Keyset 未定义”是 2 个不同的错误代码,出现的原因有 2 个。正如建议的副本所示,“密钥集不存在”通常是权限问题。但是,当无法加载包含密钥的加密服务提供程序时,可能会出现“未定义密钥集”。正如下面的答案所示,这有时可能是由程序和 CSP 之间的 32/64 位不匹配引起的。 【参考方案1】:我已经解决了这个错误。这很容易。您选择“平台目标”为 x86。
右击你的项目->属性->构建->平台目标->x86
问候,
【讨论】:
非常感谢!我会测试这个! 更一般地说,问题是程序的位数与 CSP 的位数不匹配。在某些情况下,更改平台目标就足够了,但在其他情况下,问题可能在于使用具有正确位数的 CSP。例如,nCipher CSP 有单独的 32 位和 64 位版本。以上是关于未定义键集[重复]的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的 ReferenceError:$ 未定义 [重复]
未捕获的 ReferenceError:“$ 未定义”[重复]