17

THAWTE からコード署名証明書 (MS Authenticode) を購入し、ビルド マシンにインストールしたようです。ユーザーとしてログインしていて、cmd プロンプトを開くと、signtool.exe で証明書を使用して EXE に署名できます。

残念ながら、この同じコマンド ラインは、マシン上で実行されている hudson プロセスでは機能しません。

私が得るエラーメッセージは次のとおりです。

SignTool エラー: 指定されたすべての基準を満たす証明書が見つかりませんでした。

これは、thawte から証明書を取得するために使用したアカウントから signtool.exe を実行したアカウントとは異なるアカウントで hudson サービスが実行されているためだと推測されます。

だから、私の質問は次のとおりです。この問題を解決するにはどうすればよいですか? 私は thawte からファイルをダウンロードしようと思っていましたが、代わりに IE を使用して魔法のようにユーザーのキャッシュに証明書をインストールしました。私はおそらく、他のマシンで保存/保存または使用できるファイルにエクスポートしたいと考えています(または正しい用語が何であれ)。

システム/サービスアカウントの別のユーザーからのファイルまたは証明書を使用して、それを行うにはどうすればよいですか?また、signtool を正しく呼び出すにはどうすればよいですか?

4

5 に答える 5

15

出力からsigntool sign -h取得:

/s <name>   Specify the Store to open when searching for the cert. The default
is the "MY" Store.
/sm         Open a Machine store instead of a User store.

これを機能させるのは少し面倒です...証明書をローカル マシン ストアに追加し、/sm スイッチを使用することで機能させることができました。

/s スイッチを使用すると、使用する定義済みストアを選択できます。残念ながら、利用可能なオプションが実際に何であるかをリストしたドキュメントを見つけることができません (@Microsoft signtool 管理者: これをドキュメント化してください!)。さらに複雑なのは、Hudson がアクセスを提供しているストアを特定するのが難しいことです。これは、ご想像のとおり、ローカル セキュリティ hudson アカウントではありません。

注: mmc ビューにリストされている「個人用」ストアは、signtool からアクセスした場合の「MY」ストアです。

ありがたいことに、/sm スイッチを使用すると、刑務所から抜け出すためのカードが提供されます。残念ながら、ビルド サーバーが複数の組織または部門のジョブを実行する場合、これはセキュリティ リスクになります。私の場合、それは私のグループでのみ使用されるため、これは気になりません。

于 2011-11-17T20:57:10.850 に答える
4

参考までに、私たちの経験をここに追加します。TeamCity を使用して署名付き ClickOnce アプリを構築しています。これを正しく行うのに数時間かかったので、これが他の誰かの時間を節約できることを願っています.

注: ドメイン サーバーでもある Windows 2k3 サーバー上でこれを実行しています (ええ、私は知っています)。

  1. GoDaddyのコード署名証明書を使用しています。CSR はInternet Explorer で生成されました。したがって、Internet Explorer で発行を完了すると、基本的に、自分のアカウントにコード署名証明書がインストールされました。

  2. ビルド サーバーで証明書が必要だったので、IE で選択しました。

    [エクストラ] > [インターネット オプション] > [コンテンツ] > [証明書]

    次に、証明書を右クリックして[エクスポート]しました。[個人キーのエクスポート]にチェックを入れ、 [すべての証明書のエクスポート][すべてのプロパティのエクスポート]をオンにして PFX 形式を選択しました (最後のものが本当に必要かどうかはわかりません)。最後に、場所を指定した後、プレシャスを手に入れました。

  3. これで、いくつかの本当の痛みの準備が整いましたが、詳細を省くために、厄介な問題はスキップします. TeamCity はシステム アカウントで実行されていたため、この証明書をビルド サーバーの同じアカウントで使用する必要がありました。そのため、ビルド サーバーで次のように呼び出しました。

    C:\> psexec -i -s cmd

  4. それは私にコマンドラインを投げつけ、システムユーザーとして実行しました。ここで、さびた IE を再度呼び出しました。

    C:\> C:\Program Files (x86)\Internet Explorer\iexplore.exe

  5. 証明書に移動し、エクスポートする代わりに[インポート]を選択し、以前にエクスポートした証明書を選択しました。それらを保存する場所はWindows に選択させます。

  6. これで、ClickOnce が証明書を使用してアプリに署名するための準備が整いました。ClickOnce がそれを認識していることを確認する必要がありました。キー ファイルをコード リポジトリに配置したくなかったので、ローカルの Visual Studio でプロジェクト プロパティの[署名]タブにある[ClickOnce マニフェスト]にチェックを入れ、 [ストアから選択...]を [ の代わりに使用しました。ファイルから選択...]。これにより、ローカルにインストールされた証明書を選択できました。その瞬間、VS はプロパティ <ManifestCertificateThumbprint> を作成しました。これは、これをビルド サーバーで実行する上で最も重要なことです。

    必須ではありませんが、ソフトウェアに署名することを強くお勧めするタイムスタンプ サーバーも追加したことに注意してください。そうしないと、証明書の有効期限が切れたときにソフトウェアの検証が停止する可能性があります。GoDaddy の場合、タイム サーバーはhttp://tsa.starfieldtech.comです。

    また、アセンブリに (まだ) 署名していないことにも注意してください。これが可能であることを知っているように言うだけです。

  7. ここで、ビルド サーバーはプロジェクト ファイルと新しい ManifestCertificateThumbprint プロパティを取得し、SignTool タスクにフィードします。これを実行するには、signtool.exeを C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin からビルド サーバーの同じ場所にコピーする必要がありました。

    signtool が機能しない理由を突き止めるために、深刻な厄介なデバッグが行われました。ProcMonProcess Explorerなどのツールを取り出して、どのレジストリ キーがどのコマンド ラインで要求されているかを調べました。SignTool によって呼び出される実際のコマンド ラインを再作成し、これらのツールでの効果を観察しました。

最後に、開発とシステム管理者の多大な苦労の末、署名済みの ClickOnce アプリをデプロイすることができました。乾杯!

于 2013-03-21T17:02:37.060 に答える
1

これは今では少し古いですが、文書化する価値がある同様の問題があったと思いました。

ジョブの実行時に証明書を見つけることができなかったサービスとして Win2008R2 で実行されている Jenkins CI サーバーがありますが、同じマシン上で手動で署名することができました。

signtool sign /sha1 ### file.dll  
SignTool Error: No certificates were found that met all the given criteria.

問題は、Jenkins サービスがローカル マシンとして実行されていたことでした。そのため、上記の回答を使用するとうまくいくと思いました。

signtool sign /sm /sha1 ### file.dll

同じエラー。/a何もしなかった。

管理者グループメンバーとしてユーザー「Jenkins」を作成し、ユーザー「Jenkins」としてサービスを実行し、Jenkinsユーザーとしてログインし、証明書をユーザーストアにインストールすることで機能しました。

はい、証明書をローカル マシン ストアにインストールしました。mmcサービス アカウント - Jenkins ストアを使用して追加することで、サービス ストアに証明書があることも確認しました。

于 2012-12-03T06:15:45.213 に答える
0

これは簡単に解決できる問題だと思いました。代わりに、それはギリシャの悲劇に変わりつつあります。

プロバイダーである Thawte は、要求が開始されたのと同じマシンとブラウザーですべての証明書アクションが発生することを要求することが有用であると考えているようです。残念ながら、私の場合は Windows7 マシンから実行しました。証明書を取得したときに秘密鍵を使用してエクスポートできないことを意味する、MS のナンセンスが原因です。これは、Win2000 と XP でのみ可能です。そのため、ビジネスの基本的なことを行うには、7 年前の OS を使用する必要があります。これは驚くべきことです。

証明書の 3 番目の要求が満たされるのを待っていることがわかりました。

于 2010-04-24T03:03:50.683 に答える