Я давно ищу, но не могу найти ответ на следующий вопрос. Я храню пару ключей в Магазине Windows и недавно начал получать сообщение об ошибке «Набор ключей не существует». Проведя дальнейшее расследование, я обнаружил, что это могут быть две вещи: 1 - закрытый ключ не сохраняется с атрибутом набора постоянного ключа (X509KeyStorageFlags.PersistKeySet) и 2 - права доступа к ключу. Я попробовал и 1 и 2 безуспешно на одной машине (в моей машине это работает, очевидно). Странно то, что когда я заглядываю в Microsoft \ Crypto \ RSA \ MachineKeys (и S-1-5-18), ключ остается там, но только в течение некоторого времени, а затем удаляется, что означает, что он не сохраняется.
<code>//If decoded then save as RSACryptoServiceProvider
newCert.PrivateKey = DecodePrivateKey(privateKeyFile, pkPassword)</p>
<p>if (newCert.PrivateKey == null)
throw new System.NullReferenceException("Decoded private key resulted in a null reference. Unable to store certificate.");</p>
<p>byte[] pfx = newCert.Export(X509ContentType.Pfx);
newCert = new X509Certificate2(pfx, string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
Я выполняю этот код в службе WCF, размещенной в IIS, и сертификат удаляется, даже если я даю разрешения сетевой службе, AppPoolIdentity, моей учетной записи и т. Д. Через MMC-CertMgr. Кто-нибудь знает, почему это происходит?
Заранее спасибо!
UPDATE:
Сегодня я только что узнал, что, поскольку я делаю это через службу WCF, пул приложений удаляет закрытый ключ, когда он достигает своего предела времени простоя, поэтому я полностью уверен, что это пул приложений, который удаляет закрытый ключ что приводит к удалению ключа из папок Microsoft \ Crypto \ RSA \ MachineKeys и S-1-5-18. Сегодня я оставил тестовый прогон, в котором отключил простой, закрытый из пула приложений, но я все еще не уверен, перестанет ли закрытый ключ сохраняться при перезапуске или что-то в этом роде?
Кто-нибудь знает, как заставить пул приложений перестать удалять мои личные ключи?