トップ回答者
CliCkOnceアプリケーションでコードサイニング証明を署名したが、Smart Screenを回避出来ない問題について

質問
-
Visual Studio 2005(VB)で開発したアプリケーションを、CliCkOnceにて、顧客に提供しようとしています。
この際、セキュリティの警告と、Smart Screenからのメッセージ(WindowsによってPCが保護されました)が出力されます。
これを回避する為、コードサイニング証明書を購入し、プロジェクト・プロパティの「署名」タブで「ファイルから選択」させ、証明書を付与しました。結果、
・セキュリティの警告は「不明な発行元」から、「公開元」が記載されるようになった。
アイコンは軽度の警告である黄色に変わった。
・Smart Screenからのメッセージは、変わらず出力されたまま。
この際、アプリ名は実行される exeが表示されるが、その発行元が「不明な発行元」のまま。となりました。
この際、Smart Screenの際に「不明な発行元」となるのが良くないかと判断し、ビルド後イベントで
プロジェクトの実行ファイルに「SignTool.exe」を使用して署名するようにコマンドを記載しました。
ClickOnce発行を行った際のビルド時出力メッセージでは署名が成功した旨が表示されていましたが、
上記の結果は変わりませんでした。(不明な発行元のまま)
そこで質問ですが、
・CliCkOnceの、上記の動作は正しいのでしょうか?
特に、Smart Screenの際に「不明な発行元」となるのは、CliCkOnceインストーラーでインストールされる場合のアプリとしては普通の事なのでしょうか?
・回避策はあるのでしょうか?
CliCkOnceのアプリの署名方法で、何か見落としがあるのか?
.NET2005 では、 .net framework 2.0で動作するので、Smart Screenは回避しようがないとか
EVコード署名証明書が必ず必要とか
そのような情報で、わかることがありましたら、教えて頂きますと幸いです。宜しくお願いいたします。
回答
-
ClickOnce に限った話ではないと思います。
普通の Code Signing ではある程度の利用者が承認する(レピュテーションを受ける)までは安全とみなされないそうです。
EV Code Signing だとそういったプロセスが不要だという海外のスレッドの情報もあります。
http://stackoverflow.com/questions/12311203/how-to-pass-the-smart-screen-on-win8-when-install-a-signed-application
すべての返信
-
私はClickOnceを試したことがありません。
下記の内容は、参考程度としてください。1.署名するときにタイムスタンプが設定されているか
署名するとき、署名発行元のタイムスタンプサーバーでタイムスタンプは設定されているでしょうか。2.使用しているコードサイニング証明書はsha-1かどうか
2016/1/1以降に購入されたsha-1コードサイニング証明書を利用されている場合、Windows上で使用できなくなっている様です。
SHA-1 ハッシュ アルゴリズムによって署名された証明書の廃止について3.ClickOnceインストーラーは署名済みか
ビルドされたexeだけでなく、インストーラーも署名が必要だと思います。
インストーラーは、署名されているでしょうか。4.ダウンロードサイトがsha-1署名を使用していないか
ClickOnceをダウンロードするサイトは、sha-1で署名されていないでしょうか。
sha-1で署名されているサイトからダウンロードしたファイルは、SmartScreenの対象になるはずです。
マイクロソフト ルート証明書プログラムでの SHA-1 ハッシュ アルゴリズムの廃止 -
ClickOnce に限った話ではないと思います。
普通の Code Signing ではある程度の利用者が承認する(レピュテーションを受ける)までは安全とみなされないそうです。
EV Code Signing だとそういったプロセスが不要だという海外のスレッドの情報もあります。
http://stackoverflow.com/questions/12311203/how-to-pass-the-smart-screen-on-win8-when-install-a-signed-application -
回答ありがとうございました。
>1.署名するときにタイムスタンプが設定されているか
開発環境の署名の中で設定しております。なお、ビルド後のコマンド発行では行っていなかった為、設定を追加してみました。
結果としましては、状況は変わりませんでした。>2.使用しているコードサイニング証明書はsha-1かどうか
SHA-2(sha256RSA)です。
>3.ClickOnceインストーラーは署名済みか
CliCkOnce発行後に作成される Setup.exe に対しても、署名して実行してみました。
結果は変わりませんでした。>4.ダウンロードサイトがsha-1署名を使用していないか
SSL設定をしており、こちらの署名も sha-1ではありません。-------------
今回、ご指摘をうけ、
・ビルド後コマンドで署名する際に、タイムスタンプサーバーの記述の追加
・CliCkOnce発行後に作成される setup.exe に対する署名の追加
を行ってみましたが、・Smart Screenからのメッセージは、出力されたまま。
この際、アプリ名は実行される exeが表示されるが、その発行元が「不明な発行元」のまま。
という状況は変わりませんでした。
ご指摘、ありがとうございました。
-
回答ありがとうございました。
>普通の Code Signing ではある程度の利用者が承認する(レピュテーションを受ける)までは安全とみなされないそうです。
CliCkOnceの仕組みそのものに問題はなく、2005であるということも問題でないとすると、結局、おっしゃる通りかもしれません。
・「信頼されたサイト」に証明書を追加する
・「信頼済みサイト」にCliClOnceの配布サーバーを追加する
などを行うと、このメッセージが表示されない事は確認しました。
上記を考えるに、単に「ある程度」の回数が、まだ少ないだけかもしれません。
ただ、Smart Screenからのメッセージで発行元が「不明な発行元」でしたので、このまま放置していても、ずっとこのままではないか、と愚行した次第でして、それが一番引っかかっていた点でした。回答ありがとうございました。
-
グローバルサインのサイトがわかりやすいかと思いましたので参考情報として共有しておきます。
https://jp.globalsign.com/service/codesign/knowledge/smartscreen.html