2009-06-25 1 views
6

信頼できるCAによって発行された証明書でEXEプログラムに署名しています。 Windows SDK v6.0aからsigntool.exeを使用しています。SignToolエラー:ISignedCode :: Sign returnedエラー:0x80092006

証明書はコンピュータストアにあり、 "Personals"フォルダにあります。

私のコマンドラインは次のとおりです。

sign /sm /n "My company" /d MyProductName /du http://my.url.com "C:\Setup\setup.exe" 

私は、コマンドラインでこのコマンドを実行すると、それが正常に動作します。 私はバッチ処理でこのコマンドを実行します(Webサービスによって呼び出されるため、コマンドが実行されたときにユーザーがログインしていないがあります)、次のエラーが発生:エラーの

数:1つの SignToolのエラー:ISignedCodeを:: Sign returned returned:0x80092006 ストアまたはオブジェクトに指定されたプロバイダーがありません。

誰でもこれを助けることができますか?

答えて

1

私は同じ条件を経験しました(異なるMSIファイルを除いて同じパラメータで呼び出しが成功した直後)。 Rerunningはビルドスクリプトの次の実行に成功しました。 また、あなた

/sm /d /du
は問題があなたのサービスのプロセスが自分のアカウントの下に格納された秘密鍵にアクセスすることができないということです
/t

2

を使用してさらに

/n
を使用しないように、使用しました。

Webサービスを実行しているアカウントにログインし、秘密キーをキーコンテナにインポートします。 、今

sn -i MyCertificate.pfx MyCodeSigningKey 

このキーコンテナを使用するようにビルドスクリプトを変更します:あなたは.NETstrong name tool (sn.exe)を使用して、たとえば、これを行うことができます

signtool sign /sm /a /v /csp "Microsoft Strong Cryptographic Provider" /kc MyCodeSigningKey <other parameters...> 

/kcはキーコンテナを指定します。 /kcには、/cspスイッチを使用して「CSP」(暗号化サービスプロバイダ)を指定する必要があります。 "Microsoft Strong Cryptographic Provider"はsnが使用する既定のプロバイダーです。

+0

疑問のある質問 - 私は上記の/ smを使用しているので、秘密鍵をコンピュータの店舗に保存しないでください。私は同じことに取り組んでおり、別のツール(sn.exe)をプロダクションマシンに置かないようにしたいと考えています。 – DougN

+0

証明書はマシンストアに格納されますが、秘密鍵には格納されません。 snは標準の.Netインストールの一部です。 – oefe

1

時間を節約するために、私はこの問題を抱えていました。何とか私の証明書が破損していることが判明しました。証明書ストアから証明書を削除してもう一度インポートした後、問題は解決しませんでした。 PFXファイルを作成したり、破損していないことがわかっている場所からコピーすることをお勧めします。

0

私もこの問題を抱えています。見つけ出す時間がなかったので、それが何を引き起こしたのかまだよく分かりません。私が見つけたのは、秘密鍵が紛失したことです!

私はcoder_2007が示唆したことを行いました。これは完全な自動ビルドのために機能しましたが、次のものは同じエラーが発生します。だから私のビルドサーバー上の何かが完全なビルド(いくつかの署名されたアプリケーションを含む)の後で秘密鍵を破った。

最終的には、PFXをインポートした直後に%allusersprofile%\Microsoft\Crypto\RSA\MachineKeysに移動し、最新のファイル(インポート時に一致するファイル)を書き込み保護しました。

0

これは、証明書のインストール後にWindowsパスワードが変更された場合に発生します。パスワードを元の状態に戻すと修正されます。それができない場合は、証明書を再インストールする必要があります。