尝试使用从 CurrentUser Store 检索到的证书私钥时出错
Error trying to use the Private Key of cert retrieved from CurrentUser Store
我正在尝试使用我的证书代理证书签署 CSR。但是,当我从 currentUser 的商店获取证书并尝试使用密钥对其进行签名时,我收到此错误 "CertEnroll::CSignerCertificate::Initialize: Cannot find object or property. 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)" 但是,如果我从 LocalMachine 商店获取证书,我就没有这个问题并且它可以工作。我无法使用本地计算机存储证书,因为证书代理证书的私钥不可导出。
这是我从证书库获取证书的代码:
const string ekuOid = "2.5.29.37";
const string enrollmentAgentOid = "1.3.6.1.4.1.311.20.2.1";
var store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 certificate = null;
foreach (var cert in store.Certificates)
{
if (!cert.HasPrivateKey || cert.NotBefore > DateTime.UtcNow || DateTime.UtcNow > cert.NotAfter) { continue; }
foreach (var eku in cert.Extensions.Cast<X509Extension>().Where(ext => ext.Oid.Value == ekuOid).Cast<X509EnhancedKeyUsageExtension>())
{
if (eku.EnhancedKeyUsages.Cast<Oid>().Any(usage => usage.Value == enrollmentAgentOid))
{
certificate = cert;
}
}
}
return certificate;
但是当我调用 CERTENROLLLib 初始值设定项时 (Initialize(bool MachineContext, X509PrivateKeyVerify VerifyType, EncodingType Encoding, string strCertificate)) 我在调试器中得到了提到的异常 above.looking 变量在出现时看起来是一样的来自 LocalMachine 的时间比来自当前用户的时间要多。
问题出在初始化中,我将机器上下文设置为 true 而不是 false 导致它失败。证书在调试器工具显示时被正确检索。
我正在尝试使用我的证书代理证书签署 CSR。但是,当我从 currentUser 的商店获取证书并尝试使用密钥对其进行签名时,我收到此错误 "CertEnroll::CSignerCertificate::Initialize: Cannot find object or property. 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)" 但是,如果我从 LocalMachine 商店获取证书,我就没有这个问题并且它可以工作。我无法使用本地计算机存储证书,因为证书代理证书的私钥不可导出。
这是我从证书库获取证书的代码:
const string ekuOid = "2.5.29.37";
const string enrollmentAgentOid = "1.3.6.1.4.1.311.20.2.1";
var store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 certificate = null;
foreach (var cert in store.Certificates)
{
if (!cert.HasPrivateKey || cert.NotBefore > DateTime.UtcNow || DateTime.UtcNow > cert.NotAfter) { continue; }
foreach (var eku in cert.Extensions.Cast<X509Extension>().Where(ext => ext.Oid.Value == ekuOid).Cast<X509EnhancedKeyUsageExtension>())
{
if (eku.EnhancedKeyUsages.Cast<Oid>().Any(usage => usage.Value == enrollmentAgentOid))
{
certificate = cert;
}
}
}
return certificate;
但是当我调用 CERTENROLLLib 初始值设定项时 (Initialize(bool MachineContext, X509PrivateKeyVerify VerifyType, EncodingType Encoding, string strCertificate)) 我在调试器中得到了提到的异常 above.looking 变量在出现时看起来是一样的来自 LocalMachine 的时间比来自当前用户的时间要多。
问题出在初始化中,我将机器上下文设置为 true 而不是 false 导致它失败。证书在调试器工具显示时被正确检索。