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