Я пытаюсь подписать CSR с моим сертификатом агента сертификата.однако, когда я получаю сертификат из хранилища currentUser и пытаюсь использовать ключ для его подписи, я получаю эту ошибку «CertEnroll :: CSignerCertificate :: Initialize: не удается найти объект или свойство. 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)» однако, если я его получаюиз LocalMachine Store у меня нет этой проблемы, и она работает.Я не могу использовать локальный компьютер для хранения сертификата, потому что сертификаты агента сертификата имеют свой закрытый ключ как не подлежащий экспорту.
это мой код для получения сертификата от cert sotre:
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, строка strCertificate)) Я получаю исключение, упомянутое выше. Смотря на отладчик, переменная выглядит так же, когда она поступает из LocalMachine, чем когда она поступает от текущего пользователя.