他の Windows システム (Server 2008 R2、7、8) で使用すると正常にインストールされる PFX ファイルがあります。私のサーバーのうち 2 台では、次のようにインポートが失敗します。
CertUtil: -importPFX command FAILED: 0x80090016 (-2146893802)
CertUtil: Keyset does not exist
当初、この PFX は MMC スナップインを使用してインポートしましたが、エラーは報告されず、証明書を開くと秘密キーがあることが示されるため、正常に機能しているように見えますが、.NET アプリケーションでは秘密キーがないというエラーが発生していました。秘密キーのアクセス許可を想定し、アプリケーション プールに適切なアクセス許可を追加しました。それでも状況は変わりませんでした。この問題を解決するために、インポートと削除を何度か繰り返しました。
MMC 経由でインポートを実行したときにフォルダーに追加されたファイルのサイズは、C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
正常に動作するシステムでは通常 2 KB と表示されるのに対し、動作していないサーバーでは 79 KB しかなかったことがわかりました。
ファイルに対して MD5 チェックを実行し、同じであることを確認しました (同じでした)。また、動作していなかったシステムからファイルをコピーし直しました (エクスポートではなく、元のコピー ファイル)。このファイルは他の場所では引き続き動作します。
なぜ失敗するのでしょうか?
答え1
私たちが実行したすべての Google 検索では、常に同じ基本的な回答が返されました。それは、秘密鍵のアクセス許可に関連するものでした... しかし、これは私たちが目にしていたエラー メッセージに基づいていました。
最終的に、フォルダーとレジストリへのアクセスをログに記録するためWinHttpCertCfg.exe
にを使用した結果、問題を追跡することができました。Process Monitor
開発者の 1 人がテスト証明書を追加したときに、C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
MMC の証明書スナップインを通じてアクセス許可を付与するのではなく、IIS がインポートした証明書の秘密キーにアクセスできるように、フォルダーのセキュリティアクセス許可も変更しました。
彼は新しい権限を追加しただけで、既存の権限は変更しませんでしたが、何らかの理由で証明書のインポートが壊れてしまいました。追加の権限を削除すると、再び動作するようになりました。
他の人も同じ問題を抱えているとは到底思えませんが、いつか他の誰かの役に立つかもしれないので、質問を削除したり閉じたりするのではなく、回答する価値があると思いました。