none
Windows Installerでの電子署名エラーについて RRS feed

  • 質問

  • Windows Installerの件で困っています。

    デジタル署名付きのWindows Installerを実行した場合に署名の整合性チェック(WinVerify Trust)で以下のエラーが発生します。

    「Error 1330.  A file that is required cannot be installed because the cabinet file C:\<tool>\Data1.cab has an invalid digital signature. This may indicate that the cabinet file is corrupt. Error 8230 was returned by WinVerifyTrust.」

    Error 8230 は、発生条件とそのエラーの回避方法について何か情報を持っている方は、情報の提供をお願いします。


    • 編集済み mt.ta1 2014年8月15日 8:23
    • 移動 星 睦美 2014年8月19日 2:45 Internet Explorer から
    2014年8月15日 8:22

回答

すべての返信

  • Internet Explorer フォーラムに投稿されていますが、関係あるのでしょうか?

    さて、メッセージには「キャビネットファイルが壊れているかもしれない」と書かれていますが、Data1.cab が壊れていないという確証は得られているのでしょうか。
    また、開発者として開発・検証などの作業で引っかかっているのか、利用者としてインストールできないインストーラー相手に困っているのか、どちらでしょうか。
    (開発フォーラムだから、開発者だとは思うのですが、念のため)

    // Error 8230 そのものはヒットする情報が少なく、私もよくわかりません…。
    // Flexera の Community でもレスポンスなし と考えると、そんなに再現性がないのだろうか?

    2014年8月15日 10:13
    モデレータ
  • インストーラーの署名に使用している証明書が確認できない、つまりルート証明書や中間証明書が Windows に入っていないからではないでしょうか?
    証明書の発行機関がルート証明書や中間証明書を配布しているのでそれを OS に入れたら症状が変わりますでしょうか?

    MCITP(Database Developer/Database Administrator)

    2014年8月17日 15:12
  • 回答ありがとうございます。

    ルート証明書や中間証明書については何度か確認を取っています。

    原因が全く分からない状況です。

    2014年8月18日 1:38
  • 回答ありがとうございます。

    特定の環境では、周りのPCも発生しているようです。

    情報も少なく再現できずに困っています。

    2014年8月18日 1:49
  • mt.ta1 さん、こんにちは。
    フォーラム オペレーターの星 睦美です。

    Windows Installer に関する質問ですが、Internet Explorer フォーラムに投稿されています。

    Azulean さんから返信していただいていますが、
    >開発者として開発・検証などの作業で引っかかっているのか、利用者としてインストールできないインストーラー相手に困っているのか、どちらでしょうか。

    役立つ情報が見つかりやすくなるように、私のほうで関連したフォーラムに質問を移動したいと思いますので
    質問の経緯(開発者 or ユーザーとして)やWindows Installer を実行している環境(OS、アプリケーション)に関する情報をお知らせいただければと思います。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2014年8月18日 4:37
  • このエラーは、Windows Installer の 1330 というエラーですね。

    日本語訳としては(論理値にて表現)

    「エラー1330。キャビネット ファイル <cabファイルパス> のデジタル署名が無効であるため、必要なファイルをインストールできません。キャビネット ファイルが壊れている可能性があります。エラー <GetLastErrorの値> が WinVerifyTrust によって返されました。」

    という感じになります(インストーラのエラーメッセージの訳し方によっては異なる場合もあります)。

    1330は、cabの署名が無効なの(検証できない)で、インストールをあきらめますという意味のエラーになります。

    これに具体的な情報として、WinVerifyTrust API の戻り値を表示(今回の場合は8230)しています。

    APIがなぜ8230を返してくるのか?については分かりません。

    Windows API の 8230 というエラーは日本語メッセージだと「比較の結果は、true でした。 」となります。

    結果が true が何を意味するのかさっぱり分かりませんが、いずれにしても署名が無効なので、改ざんの可能性(ダウンロード失敗を含む)があります。

    まずはそのあたりを確認してみましょう。

    cabファイルが複数ある時は、それぞれのcabを右クリックしてプロパティを表示し、デジタル署名がそれぞれどうなっているかを確認してみましょう。

    問題のあるcabだけおかしくなっている(デジタル署名が無効であるような表示がある)のであれば、データが壊れている or cabファイルの改ざんを疑ってみましょう。

    逆にどのcabも向こうになる場合は、msiファイルも同様に確認し、これも向こうになっているかをチェックしてみましょう。

    また、合わせてこれらについて開発元にも問い合わせをしてみましょう(開発元の場合は元の証明書ファイルを確認しましょう)。

    まずはこの辺りから調査をしてみることをお勧めします。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年8月18日 7:28
  • 回答ありがとうございます。質問の経緯について以下に示します。

    当方は、Flexera社のInstallShieldを使用して署名付きのインストーラを作成しているものです。

    製品としてこのインストーラを提供しましたが特定のお客様の環境でError 8230のエラーが発生し、インストールができないと

    いった報告を受けています。このお客様の周辺のPCすべてで問題が発生するようです。

    お客様の環境(OS)は以下の様になっています。

    Windows7 Professional Service Pack1 英語バージョン

    開発元にも問い合わせましたが回避策が導きだせていない状態です。

    2014年8月19日 1:39
  • mt.ta1 さん、環境に関する情報をお知らせいただきありがとうございます。
    >このお客様の周辺のPCすべてで問題が発生するようです。
    ネットワーク環境の情報も手がかりなるかも知れませんのでよろしければお知らせください。ドメイン(Active Directory、グループ ポリシーを利用など)で、インターネットに接続など。

    Windows Installer ログの内容にError 1330、8230 に関する情報がありましたら追加の情報をお願いします。

    今回の質問はInternet Explorer と関連がないようですので、MSDN - Windows クライアント開発 フォーラムに移動しました。

    ※以下のFLEXERA社のページに技術情報、サポート、フォーラムなどのリンクがありますのでご参考までに。
    FLEXERA Customer Community:
    https://flexeracommunity.force.com/customer/articles/en_US/INFO/


    フォーラム オペレーター 星 睦美 - MSDN Community Support



    • 編集済み 星 睦美 2014年8月19日 4:29 FLEXERA社のURL
    2014年8月19日 2:49
  • APIがなぜ8230を返してくるのか?については分かりません。

    WinVerifyTrust() が CRYPT_E_SECURITY_SETTINGS を返すと、MSI は 8230 と表示しました。

    HRESULT_CODE() でもしてるんじゃないでしょうか。


    • 編集済み HomeCloset 2014年8月19日 6:06 API typo
    2014年8月19日 4:28
  • 8230について。。。

    16進数にすると 0x2026 で、CRYPT_E_SECURITY_SETTINGS(0x80092026) ですね。

    リファレンスにも書いてありますが、HRESULT じゃないので、SUCCEEDEDとかでチェックしないようにって書かれていることから、ルーチンワークのどこかで丸めちゃってるのかもしれませんね。

    8230を返してしまうのはバグっぽいですが(本来なら 0x80092026を返す必要がある)、ほかに2026を下位16bitで保持しているものがないので、おそらくこのエラーが本来のエラーなのでしょう。

    ちなみに、エラー表示ツール(Error Lookup)でみると

    「ローカル セキュリティのオプション設定のため、暗号化操作に失敗しました。 」

    というメッセージが出てきました。

    CRYPT_E_SECURITY_SETTINGS や 0x80092026 で、Webを検索してみるとほかにも情報が出てるかもしれません。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年8月19日 4:57
  • なので、WTPF_ALLOWONLYPERTRUST とかそれ相当の設定がされちゃっている可能性が高いかと思います。
    • 回答としてマーク 星 睦美 2014年8月26日 8:26
    2014年8月19日 6:03
  • 当方は、Flexera社のInstallShieldを使用して署名付きのインストーラを作成しているものです。

    Installshieldの生成するcab形式は特殊なもので、(cab設計者の)Microsoftの期待しない形式ではと思います。例えばExplorerで中身を閲覧できましたっけ?そのような場合、Microsoft社のツールで通常のcab形式と思いデジタル署名しようとすると不完全な形になるのも当然かと。

    開発元にも問い合わせましたが回避策が導きだせていない状態です。

    この辺りはInstallshieldのバージョンにも依存します。回避策以前の問題として、当該Installshieldがデジタル署名対応か、また署名手順が適切なものかを確認してみてはどうでしょうか?

    2014年8月19日 6:31
  • >Installshieldの生成するcab形式は特殊なもので

    現在の InstallShield は、InstallScript 形式(こちらのcabは独自形式)と、MSI形式(MSのcab形式)の2つがあります。

    表題が、WindowsInstaller なので後者の形式だと思いますので、署名そのものは、問題がないものと思います。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年8月19日 6:43
  • 回答ありがとうございます。

    WTPF_ALLOWONLYPERTRUST をregeditで直接設定することで再現することができました。

    具体的にUIなどからWTPF_ALLOWONLYPERTRUST を設定する機能(設定項目)を御存じでしょうか?

    2014年8月20日 1:32
  • Enable trusted publisher lockdown
    2014年8月20日 11:54