私は今一週間Authenticode certificatesの周りに自分の心を包み込みしようとしています。私はComodoからCSCを購入しました。私は、SmartScreenフィルターの警告が消えるように署名したいClickOnceアプリケーションを持っています。AfterCompileターゲットでClickOnceアプリケーションに署名する
私のアプリケーションアセンブリには厳密な名前が付けられており、「プロジェクトプロパティ」の「アセンブリに署名する」というボックスにチェックが入っています。また、同じプロジェクトプロパティで "ClickOnceマニフェストに署名する"というチェックボックスをオンにしました。そして最後に、私はSHA1とSHA256の両方で実行可能ファイルをデュアルサインために、私のプロジェクトファイルにAfterCompile目標として設定し、次の実行を持っている:
<Target Name="AfterCompile">
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /t http://timestamp.comodoca.com /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /as /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
それから私は、プロジェクトを発行するためのコマンド以下の実行します:
"C:\プログラムファイル(x86の)\ MSBuildの14.0 \ビン\からMSBuild.exe \" /対象:パブリッシュ/ P:設定=リリース/ P:プラットフォーム= AnyCPU MyCoolApplication.csproj
私が気づいたのは、このコマンドが最終的に3つのMyCoolApplication.exeの別々のバージョン:
- それはそれはそれは、最終的なコピーを作成します
- デュアル署名されているOBJ \リリースで別のコピーを作成します
- 署名されている、ビン\リリースで一つのコピーを作成します一度だけ署名とタイムスタンプに
を利用できないようです残念ながら、それを動作させる必要のあるビン\リリース\のapp.publishでコピーだが、いくつかの理由で、このバージョンされているbin \リリース\のapp.publish、中二重署名を削除しています。間違っている可能性のある私の理解は、obj \ Releaseに物を構築し、bin \ Release \ app.publishにコピーしてからマニフェストに署名したことです。しかし、最終的な実行可能ファイルのデジタル署名が明確に変更されているので、明らかに何かが起こっています。ここでは、これら二つのファイルのプロパティですサイド・バイ・サイド:
に問題が最終的に単一署名/タイムスタンプのバージョンが欠落することで、アプリケーションがまだ全体のレンダリング、SmartScreenフィルターが付けられてしまうことです無意味なプロセス。これをどうすれば解決できますか?
UPDATE:this guideを読んだ後、私が適切なものに署名しても、私はまだ自分のアプリケーションのための十分な「評判」を持っていないのおかげで、SmartScreenフィルターにぶつかることと思われます。しかし、私は最初に正しく物事にサインし、煙を追いかけていないことを確認したいと思います。 (これはビルドプロセスの崩壊の指標である場合、または、私はそれを修正したい!)
EDIT:
:ここは@CodeFullerが要求したからMSBuild.exe出力の終わりですAfterCompile:
"ときSignTool.exe" 記号/ F "certificate.pfx"/Pがmypassword /トンhttp://timestamp.comodoca.com/V「MyCoolApplication \ OBJ \リリース\ MyCoolApplication。exeファイル」
次の証明書が選択されました:MyCoolApplication \ OBJ \リリース\ MyCoolApplication.exe
ファイル数:
...追加のストア
に成功署名を追加
を完了します正常に署名されました:1
警告の数:0
エラー数:0
"ときSignTool.exe" 記号/ "MyCoolApp licationの\のcertificate.pfx" F/Pがmypassword/FDのSHA256は/ TR http://timestamp.comodoca.com/?td=sha256/TD SHA256 /として/ V「MyCoolApplication \ OBJ \リリース\ MyCoolApplication.exeは」
次の証明書が選択されました:
...
完了は追加のストア
大成功を追加しますsfully署名:MyCoolApplication \ OBJ \リリース\ MyCoolApplication.exe
に成功署名されたファイルの数:警告の1つの
数:エラーの0
数:0
_DeploymentComputeClickOnceManifestInfo:
ディレクトリ "bin \ Release \ app.publish"を作成します。
"obj \ Release \ MyCoolApplication.exe"から "bin \ Release \ app.publish \ MyCoolApplication.exe"にファイルをコピーしています。
_CopyAppConfigFile: "ビン\リリース\ MyCoolApplication.exe.config" を "App.configファイル" から
コピーファイル。
_CopyManifestFiles: "ビン\リリース\ MyCoolApplication.exe.manifest" を "OBJ \リリース\ MyCoolApplication.exe.manifest" から
コピーファイル。
MyCoolApplication - > C:\ユーザーはプロジェクト\ MyCoolApplication \ MyCoolApplication \ binに\リリース\ MyCoolApplication.exe.manifest \ Visual Studioの2015 \「OBJ \リリース\ MyCoolApplication.applicationから
コピーファイルをゴードン\ドキュメント\します"を" bin \ Release \ MyCoolApplication.application "に変更します。
MyCoolApplication - > C:\ Users \ Gordon \ Documents \ Visual Studio 2015 \ Projects \ MyCoolApplication \ MyCoolApplication \ bin \ Release \ MyCoolApplication。アプリケーション
CopyFilesToOutputDirectory: "OBJ \リリース\ MyCoolApplication.exe" への "bin \リリース\ MyCoolApplication.exe" から
コピーファイル。
MyCoolApplication - > C:\ユーザーはに "OBJ \リリース\ MyCoolApplication.pdb" からプロジェクト\ MyCoolApplication \ MyCoolApplication \ binに\リリース\ MyCoolApplication.exe
コピーファイル\ Visual Studioの2015 \ゴードン\ドキュメント\します"bin \ Release \ MyCoolApplication.pdb"をクリックします。
_CopyFilesToPublishFolder:
作成ディレクトリ "のbin \リリース\ app.publish \アプリケーションファイル\ MyCoolApplication_1_0_0_0"。
"bin \ Release \ MyCoolApplication.exe.manifest"から "bin \ Release \ app.publish \ Application Files \ MyCoolApplication_1_0_0_0 \ MyCoolApplication.exe.manifest"にファイルをコピーします。 "bin \ Release \ app.publish \ MyCoolApplication.exe"から "bin \ Release \ app.publish \ Application Files \ MyCoolApplication_1_0_0_0 \ MyCoolApplication.exe.deploy"にファイルをコピーします。 "App.config"から "bin \ Release \ app.publish \ Application Files \ MyCoolApplication_1_0_0_0 \ MyCoolApplication.exe.config.deploy"にファイルをコピーしています。 "triforce.ico"から "bin \ Release \ app.publish \ Application Files \ MyCoolApplication_1_0_0_0 \ triforce.ico.deploy"にファイルをコピーしています。 ビルドプロジェクト "C:¥Users¥Gordon¥Documents¥Visual Studio 2015¥Projects¥MyCoolApplication¥MyCoolApplication¥MyCoolApplication.csproj"(ターゲットの公開)。
ビルドに成功しました。 0警告(秒) 0エラー(S)
経過時間00:00:06.53
を私の経験はあなたですSmartScreen(より高価な...)を渡すためにExtended Validation(EV)コード署名証明書が必要です。私たちは、そのような証明書で署名し、それがうまく動作するclick once appを持っています(signtoolでカスタムステップを実行していないので、通常のVSプロジェクトのClickOnceプロパティを使用して署名します)。欠点はpfxとパスワードで自動化できないことです:http://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing –
@SimonMourier私は、 EV証明書。しかし、マイクロソフトのウェブサイトからは、標準の(非EV)CSCが瞬時完璧な評判の恩恵を受けていないにもかかわらず、まだ署名されていないコードよりも評判が高く、評判はあなたの出版社名(署名されていないコードと同じように)個々のアプリ。 EVよりはあまり理想的ではありませんが、EVにはコストだけでなく他の欠点もあります。ハードウェアドングルを添付する必要があるため、ビルドサーバーを仮想化できません。 – SoaperGEM
まだ、私の質問は、MSBuildの中の何かが、「AfterCompile」ターゲットの後にサイレントに変更/再署名しているようですが、署名の仕上げをするように設定しています。それ。私が疑うところでは、プロセス中の何かが予期せずにファイルを変更している場合、CSCにEVが含まれているかどうかにかかわらず、問題に悩まされると思います。 – SoaperGEM