none
インストーラの発行元について RRS feed

  • 質問

  • MSIインストーラを作成してManufacturerプロパティも設定しているのですが、インストール実行時の確認済みの発行元が不明となってしまいます。インストーラに含めるアプリケーションファイルについてもClickonceでテスト証明書を作成しました。(signtoolで署名ファイルを作成して読み込んでも同様の結果でした)

    開発環境:Visual Studio Community 2015

    セットアッププロジェクト:Microsoft Visual Studio 2015 Installer Projects

    Visual Studio Communityでは発行元を設定することはできないのでしょうか。もしくは、署名について誤った解釈/使用をしているのでしょうか。

    インストーラ形式で販売/提供する場合の作法について、詳しく記載されている記事が見当たらなく質問させて頂きました。

    2017年2月11日 0:13

回答

  • 「確認済み発行元」の箇所が不明となるのを回避

    これを回避するためには署名に使用されている証明書が、信頼されたルート証明機関に証明書がインストールされているか、インストール済みの証明書で署名されているか、標準でインストールされているルート証明書から三段階、もしくは、四段階で署名された所属団体で取得したコードサイニング証明書である必要があります。

    ただし、ClickOnce配布ではなく、通常の配布の場合は、コードサイニング証明書である必要があります。

    読み物として以下があります。

    https://sakapon.wordpress.com/2015/12/12/publish-clickonce/

    https://mag.osdn.jp/12/11/19/0634216

    http://www.nda.co.jp/memo/codesigning/index.html

    ClickOnce配布の場合でコードサイニング証明書を使用しないケースは、開発環境(テスト証明書)、もしくは、企業内利用が想定ケースだと思います。(プログラム作成者が別企業の場合は委託開発品ぐらいかと思います)

    最後の資料のコラムに、「確認済み発行元」であることを証明するプロセスが如何に大変、かつ、重要かが書かれています。当然ですが、企業の場合は企業全体で役員の承認のもと証明書を取得して金庫で保管していてもおかしくないものです。(つまり担当者が勝手に部署やプロジェクトごとに取得するものではないです)


    2017年2月11日 4:32
  • 合っていますが、後者の方法を求める人は信頼されないと思います。(身内の閉じた組織内でもない限り)

    理由は、そのルート証明書を持つ人は、他の人や会社であると詐称できてしまうため。

    2017年2月11日 6:57
    モデレータ
  • デバイスドライバなどではEV証明書が必須となるケースが出てきていますが、それ以外で1が採用出来ない場合は、通常のインストーラならテストの時や個人・オープンソース・中小企業の場合は署名無しにして不明で開き直るパターンもありますね。

    ただ、企業の場合は、たとえ中小企業であっても、セキュリティ感覚が低い企業と思われてしまうと思います。

    ちなみに、自分が所属している組織は、正式リリース版のテスト前は無署名が多いです。(デバイスドライバは署名していますが、テスト時にも使うとリポジトリにコミットする奴が出現するので・・・)

    ソフトウェア統括部門が証明書の更新手続きをVerisignにして、コピーを企業内に配布。部門管理者が管理して、リリース担当者に都度貸し出しています。(昔は1か月とかでしたがコピー数を減らして期限がを短くするように厳しい運用になってます)

    逆に言うと証明を持っているということは、一定の基準で存在が確認されたという意味を持ちます。


    2017年2月11日 7:37

すべての返信

  • インストーラ起動時に表示されるダイアログの警告を消すなら、Verisignなどで購入した証明書が必要です。

    プログラムの種類のよって証明書も違いますが正しいですか?

    あと、Sha-1廃止の件もあります。

    でも、値段的に個人で購入は厳しいかもしれませんね。

    ClickOnceのその他の要件は以下をチェックしてください

    https://msdn.microsoft.com/ja-jp/library/76e4d2xw.aspx

    • 編集済み tmori3y2 2017年2月11日 3:30
    2017年2月11日 0:59
  • 既出の参照先にリンクがあります。

    https://msdn.microsoft.com/ja-jp/library/t71a733d.aspx

    https://msdn.microsoft.com/ja-jp/library/ms172240.aspx

    プログラムの改ざんを検知する証明と発行元の信頼性を示すAuthenticode証明があります

    • 編集済み tmori3y2 2017年2月11日 3:31
    2017年2月11日 2:06
  • ちょっと勘違いしていました。

    ひょっとして普通のソフト(Clickonceではない)のインストーラに署名する証明書をClickonceのウィザードで作成したということですかね?

    ならば、だめです。

    Microsoftのコードサイニング証明書によって署名された自社の証明書でmsiやsetup.exeに署名しないと問題のダイアログは消せません。


    2017年2月11日 3:29
  • ダイアログの警告を消すのではなく、インストール時に表示されるUACのダイアログで「確認済み発行元」の箇所が不明となるのを回避したいと思っています。

    開発環境についてはVisual Studio Communityでソリューション内にFormアプリケーションとSetupプロジェクトを作成しております。その際のFormアプリケーションに対してテスト証明書やsigntoolで作成した署名ファイルを読み込んでインストーラーを作り直しましたが、「確認済み発行元」が不明のままという状況になります。

    2017年2月11日 4:00
  • 「確認済み発行元」の箇所が不明となるのを回避

    これを回避するためには署名に使用されている証明書が、信頼されたルート証明機関に証明書がインストールされているか、インストール済みの証明書で署名されているか、標準でインストールされているルート証明書から三段階、もしくは、四段階で署名された所属団体で取得したコードサイニング証明書である必要があります。

    ただし、ClickOnce配布ではなく、通常の配布の場合は、コードサイニング証明書である必要があります。

    読み物として以下があります。

    https://sakapon.wordpress.com/2015/12/12/publish-clickonce/

    https://mag.osdn.jp/12/11/19/0634216

    http://www.nda.co.jp/memo/codesigning/index.html

    ClickOnce配布の場合でコードサイニング証明書を使用しないケースは、開発環境(テスト証明書)、もしくは、企業内利用が想定ケースだと思います。(プログラム作成者が別企業の場合は委託開発品ぐらいかと思います)

    最後の資料のコラムに、「確認済み発行元」であることを証明するプロセスが如何に大変、かつ、重要かが書かれています。当然ですが、企業の場合は企業全体で役員の承認のもと証明書を取得して金庫で保管していてもおかしくないものです。(つまり担当者が勝手に部署やプロジェクトごとに取得するものではないです)


    2017年2月11日 4:32
  • ご返信ありがとうございます。参考先を拝見させて頂きました。

    私の理解が誤っていたらご指摘ください。

    「確認済みの発行元」にするには信頼された署名である必要があるため、以下の方法があるということでしょうか。

    1.コードサイニング証明書を取得して署名する(有料)

    2.自己証明書(テスト証明書)を作成して署名した後、信頼されたルート証明機関に証明書をインストールする

    2017年2月11日 6:35
  • 合っていますが、後者の方法を求める人は信頼されないと思います。(身内の閉じた組織内でもない限り)

    理由は、そのルート証明書を持つ人は、他の人や会社であると詐称できてしまうため。

    2017年2月11日 6:57
    モデレータ
  • デバイスドライバなどではEV証明書が必須となるケースが出てきていますが、それ以外で1が採用出来ない場合は、通常のインストーラならテストの時や個人・オープンソース・中小企業の場合は署名無しにして不明で開き直るパターンもありますね。

    ただ、企業の場合は、たとえ中小企業であっても、セキュリティ感覚が低い企業と思われてしまうと思います。

    ちなみに、自分が所属している組織は、正式リリース版のテスト前は無署名が多いです。(デバイスドライバは署名していますが、テスト時にも使うとリポジトリにコミットする奴が出現するので・・・)

    ソフトウェア統括部門が証明書の更新手続きをVerisignにして、コピーを企業内に配布。部門管理者が管理して、リリース担当者に都度貸し出しています。(昔は1か月とかでしたがコピー数を減らして期限がを短くするように厳しい運用になってます)

    逆に言うと証明を持っているということは、一定の基準で存在が確認されたという意味を持ちます。


    2017年2月11日 7:37
  • ご回答ありがとうございます。とても参考になりました。

    やはり個人はともかく、企業でインストーラ形式を提供する場合は証明書を購入する必要がありますね。

    2017年2月11日 12:12