2

pfx ファイルから秘密キーを使用して証明書をロードし、それを LocalMachine/My (Personal) 証明書ストアにインポートしようとしています。私のコードは正常に動作しますが、ストアで証明書を表示すると、次のように表示されます

「関連付けられた秘密鍵が見つかりません」

さらに、certutil は言う

「復号化のための証明書と秘密鍵が見つかりません」

奇妙な点は、私のコードが Windows 7 開発ボックスでは正常に動作するが、Windows Server 2008 R2 または 2012 では正常に動作しないことです。また、mmc を使用して pfx ファイルを手動でインポートすると、秘密鍵が適切に保持されるように見えることも奇妙です。

ファイルをロードしてインポートするために使用しているコードは次のとおりです。

// load the certificate from pfx file
X509Certificate2 cert = new X509Certificate2(filePath, pfxPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);

// import to the store
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite); //tried MaxAllowed as well
store.Add(caCert);
store.Close();

何か案は?背景情報として、前のステップで BouncyCastle を使用してコードで証明書を生成しています。そのステップで秘密鍵を永続化する際にいくつかの問題に遭遇しましたが、この質問からの回答で解決されました。また、インポートを試みているコードは管理者として実行されています。

4

1 に答える 1

0

この問題から少し離れたことが、調査を改善するのに役立ちました。インポートされた証明書の秘密鍵ファイルを追跡しました

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
ファイルには所有者がなく、権限が設定されていないことがわかりました(管理者やシステムであっても)。これらのアクセス許可を手動で変更すると、ストアで証明書を表示するときに「関連付けられた秘密キー」メッセージが表示されなくなりました。

そのため、秘密鍵をストアにインポートする前に、秘密鍵にアクセス許可を設定するようにコードを変更する必要がありました: https://stackoverflow.com/a/4902009/332610

万歳!

于 2015-10-09T18:54:49.790 に答える