У нас есть файл PFX, который при использовании в любой другой системе Windows (Server 2008 R2, 7, 8) устанавливается нормально. На двух моих серверах импорт не удался:
CertUtil: -importPFX command FAILED: 0x80090016 (-2146893802)
CertUtil: Keyset does not exist
Первоначально мы импортировали этот PFX с помощью оснастки MMC, которая, похоже, работает, поскольку об ошибках не сообщается, а сертификат показывает, что при открытии у него есть закрытый ключ, но с нашим приложением .NET мы получали сообщение об отсутствии Закрытый ключ. Мы приняли разрешения закрытого ключа и добавили правильные разрешения для нашего пула приложений. Это не имело значения. Мы импортировали и удаляли несколько раз, пытаясь это исправить.
Мы заметили, что размер файлов, добавляемых при импорте через MMC в C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
папка была всего 79 КБ на серверах, которые не работают, когда они обычно отображаются как 2 КБ в системах, где они работают.
Я проверил файлы MD5, поэтому убедитесь, что они такие же (они были), и я также скопировал их обратно из системы, которая не работала (исходный скопированный файл не экспорт), и это все еще работает в другом месте.
Почему это не удается?
Каждый поиск в Google, который мы выполняли, всегда возвращал один и тот же базовый ответ, что-то, касающееся разрешений закрытых ключей ... но это было основано на сообщениях об ошибках, которые мы видели.
В конце концов, мы обнаружили проблему после использования WinHttpCertCfg.exe
вместе с Process Monitor
для регистрации доступа к папкам и реестру.
Когда один из наших разработчиков добавил несколько тестовых сертификатов, он также изменил разрешения безопасности на C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
папку, чтобы IIS мог получить доступ к закрытому ключу импортированных им сертификатов, вместо того, чтобы предоставлять разрешения через оснастку Certificates в MMC.
Он только добавил новое разрешение и не изменил существующие, но это как-то нарушило импорт сертификатов. Когда дополнительные разрешения были удалены, он снова заработал.
Очень сомневаюсь, что у других будет такая же проблема, но подумал, что стоит ответить, а не удалять или закрывать вопрос, поскольку однажды он может просто помочь кому-то другому.