Закрытый ключ не сохраняется даже с X509KeyStorageFlags.PersistKeySet - PullRequest
3 голосов
/ 09 декабря 2010

Я давно ищу, но не могу найти ответ на следующий вопрос. Я храню пару ключей в Магазине 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. Сегодня я оставил тестовый прогон, в котором отключил простой, закрытый из пула приложений, но я все еще не уверен, перестанет ли закрытый ключ сохраняться при перезапуске или что-то в этом роде?

Кто-нибудь знает, как заставить пул приложений перестать удалять мои личные ключи?

Ответы [ 2 ]

0 голосов
/ 25 июня 2011

Вероятно, не самый лучший ответ, но если кому-то нужно знать, как я работал с этим, тогда нужно было установить AppPoolIdentity для учетной записи администратора и установить значение «Idle Time-out (minutes)» в IIS равным 0. Только так AppPool не будет удалять файлы сертификатов.

0 голосов
/ 09 декабря 2010

Я не уверен в этом конкретном случае, но на работе у нас были проблемы с использованием RSACryptoServiceProvider в контексте веб-приложения.

Что исправило проблему для нас, так это то, что мы установили «Загрузить пользователя»Профиль »на соответствующем ApplicationPool для« true ».В нашем случае мы действительно получили ошибки PermissionDenied, поэтому не уверены, что это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...