1年2017月XNUMX日以降、EVコード署名はコード署名の最小要件と見なすことができます。 証明書はUSBトークンにインストールされ、動作するにはドライバーが必要です。 Microsoft Windows SDKのツール「Signtool.exe」を使用すると、通常、バイナリにインタラクティブに署名することは問題ありません。 SigntoolがUSBトークンの証明書にアクセスしようとすると、手動による介入が発生し、セキュリティドライバーがポップアップダイアログを表示してトークンのパスワードを入力します。

継続的インテグレーション/継続的デリバリー(CI / CD)ビルド環境では、作成するタスクのほとんどは software 製品は自動化され、無人のビルドエージェントによって実行されます。 つまり、エージェントにインタラクティブにログインしている人は誰もいません。 このようなエージェントは、多くの場合、物理的なモニターやキーボードのない仮想マシンです。 EVコード署名が必要な場合、ポップアップダイアログが表示されないため、ビルドプロセスが中断または停止します。

質問 "Extended Validation(EV)コード署名の自動化stackoverflow.comの」は、これから検討する多くのソリューションを提供します。

1)ドライバオプション「シングルログオンを有効にする」を使用します。
これは、認証局からの好意的な回答です。 これには、ユーザーがビルドエージェントにログインし、パスワードをXNUMX回入力してから、ユーザーセッションをロックする必要があります。 ユーザーが一度パスワードを入力した後にログアウトすると、ユーザーセッションは閉じられ、ドライバーはパスワードをドロップします。 つまり、OSを再起動するたびに、ビルドプロセスを正常に実行する前に、誰かがエージェントにログインする必要があります。 これは、迷惑なエラーの潜在的な原因です。

2)ポップアップダイアログを検出し、パスワードを自動的に入力するツール/スクリプトを使用します。
これには、ユーザーがビルドエージェントにログインしている必要もあります。 それ以外の場合、ダイアログを表示するGUIコンテキストがなく、ツールはダイアログを検出できません。 これは、ビルドエージェントの再起動後に手動で準備する必要があることも意味します。


3)「Signtool.exe」を、手動で介入することなくファイルに署名してUSBトークンのロックを解除できるプログラムに置き換えます。
「からの答えドラケトstackoverflow.comの」は、「Signtool.exe」などの同様の情報とトークンのロックを解除するためのパスワードを取得する「etokensign.exe」をビルドするためのソースコードを提供しています。 また、証明書のコンテナ名も必要です。 これは、USBトークンから手動で抽出する必要があるXNUMX進文字列です。

最後の提案は、ビルドエージェントでユーザーログインを必要としない唯一の提案です。 このソリューションは完全に無人で実行されます。 ただし、それでも、コンテナー名の必要性により、ビルドパイプラインがUSBトークンにバインドされます。 もちろん、ビルドエージェントで簡単なスクリプトファイルを使用して、この依存関係を解消することができます。 次に、トークンごとに個別のスクリプトが必要です。 ビルドパイプラインは、実行されるビルドエージェントを区別する必要がないため、すべてのスクリプトは同じ名前である必要があります。 これにより、ソリューションは少し実行不可能になります。または、予想よりも複雑になります。


それが、ソースコードを少し変更することにした理由です。 課題は、パラメータ「/ n」を使用して「Signtool.exe」に対して行われるように、名前で証明書を識別することでした。

「draketb」からのソースコードへのいくつかの小さな変更を含む「eTokenSign2」のソースコードについては、次のリンクをクリックしてください。

eTokenSign2.exeのコマンドライン構文は次のとおりです。
etokensign.exe

ソースコードはそのままご利用いただけます。 独自のバイナリを作成するには、最後にある作成手順に従ってください。 blog エントリ。

実稼働環境では、バイナリはスクリプトファイルでラップされています。 したがって、トークンのパスワードを知っているのはIT管理者だけです。
署名が成功したことは、署名されたファイルのプロパティで確認できます。

この実行可能ファイルが、手動の介入を必要とせずにビルドプロセスを実行するのに役立つことを願っています🙂

バイナリをビルドするには、次の手順に従います。

1-以下のzipファイルをダウンロードして解凍します。
2- VisualStudioをインストールします Community 2017または Visual Studio2017ビルドツール
3-「開発者コマンドプロンプト」を開きます
4-「msbuild.exeeTokenSign2.vcxproj / p:Configuration =」を実行しますRelease” / p:Platform = x86”

免責事項
ザ SOFTWARE 商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示または黙示を問わず、いかなる種類の保証もなく、「現状有姿」で提供されます。 いいえ EVENT 著者または著作権所有者は、契約、不法行為、またはその他の行為にかかわらず、契約、不法行為、またはそれに関連して発生した請求、損害、またはその他の責任について責任を負うものとします。 SOFTWARE または使用またはその他の取引 SOFTWARE.

著作権(c)2018 panagenda

特に明記されていない限り、この作品は以下のライセンスを受けています https://creativecommons.org/licenses/by-sa/4.0/.
での「draketb」からのコードに基づく派生物です。 https://stackoverflow.com/a/47894907.