リモートアプリケーションとの安全な通信チャネルを初期化するときに、セキュリティ証明書を使用して認証を実行するWindowsサービスミドルウェアを開発しています。
Windowsサービスは、証明書をロードするために(C ++ / CLIレイヤーを介して)C++WinCryptライブラリを使用する.Net3.5アプリケーションです。特に、ストアにアクセスして証明書をロードするときに、CertFindCertificateInStoreメソッドを呼び出しています。CertFindCertificateInStoreは、デフォルトで「My」システムストアをストアとして使用します。
現在のユーザー(マシンにログオンしているユーザー)またはローカルマシンのいずれかについて、MMCコンソールを介して、「マイ」システムストアにプライベート証明書を登録しました。証明書に問題がなく、秘密鍵が含まれていることを確認してください。
Windowsサービスを現在のユーザー(再びマシンにログオンしているユーザー)として実行すると、証明書が正しく読み込まれます。代わりに、サービスを「LocalSystem」として実行すると、証明書が読み込まれません。CertFindCertificateInStoreを呼び出すと、「オブジェクトまたはプロパティが見つかりません」というエラーが発生します。代わりに、「マイ」ストアに引き続きアクセスできることを指摘します。
(注:別のユーザーを使用して新しいセッションを開き、証明書を登録したユーザーと同じWindowsサービスを実行すると、証明書が再び正しく読み込まれます)
次に、「LocalSystem」ユーザーが自分の証明書にアクセスする権限を持っていることを確認するために、MMCコンソールまたはwinhttpcertcfg.exeシステムツールのいずれかを使用しました。その後、MMCコンソールとwinhttpcertcfg.exeツールのいずれかが、理論的にはユーザー「LocalSystem」が証明書にアクセスする権限を持っていることを確認します。
この問題を解決するのに役立つ提案はありますか?
よろしくお願いします。
PS:同様の質問がここに投稿されています証明書:復号化用の証明書と秘密鍵が見つかりません署名時のエラー