トップ回答者
Windows Installerでの電子署名エラーについて

質問
-
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 は、発生条件とそのエラーの回避方法について何か情報を持っている方は、情報の提供をお願いします。
回答
すべての返信
-
Internet Explorer フォーラムに投稿されていますが、関係あるのでしょうか?
さて、メッセージには「キャビネットファイルが壊れているかもしれない」と書かれていますが、Data1.cab が壊れていないという確証は得られているのでしょうか。
また、開発者として開発・検証などの作業で引っかかっているのか、利用者としてインストールできないインストーラー相手に困っているのか、どちらでしょうか。
(開発フォーラムだから、開発者だとは思うのですが、念のため)// Error 8230 そのものはヒットする情報が少なく、私もよくわかりません…。
// Flexera の Community でもレスポンスなし と考えると、そんなに再現性がないのだろうか?
- 編集済み AzuleanMVP, Moderator 2014年8月15日 10:25
-
mt.ta1 さん、こんにちは。
フォーラム オペレーターの星 睦美です。Windows Installer に関する質問ですが、Internet Explorer フォーラムに投稿されています。
Azulean さんから返信していただいていますが、
>開発者として開発・検証などの作業で引っかかっているのか、利用者としてインストールできないインストーラー相手に困っているのか、どちらでしょうか。役立つ情報が見つかりやすくなるように、私のほうで関連したフォーラムに質問を移動したいと思いますので
質問の経緯(開発者 or ユーザーとして)やWindows Installer を実行している環境(OS、アプリケーション)に関する情報をお知らせいただければと思います。フォーラム オペレーター 星 睦美 - MSDN Community Support
-
このエラーは、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/
-
回答ありがとうございます。質問の経緯について以下に示します。
当方は、Flexera社のInstallShieldを使用して署名付きのインストーラを作成しているものです。
製品としてこのインストーラを提供しましたが特定のお客様の環境でError 8230のエラーが発生し、インストールができないと
いった報告を受けています。このお客様の周辺のPCすべてで問題が発生するようです。
お客様の環境(OS)は以下の様になっています。
Windows7 Professional Service Pack1 英語バージョン
開発元にも問い合わせましたが回避策が導きだせていない状態です。
-
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
-
APIがなぜ8230を返してくるのか?については分かりません。
WinVerifyTrust() が CRYPT_E_SECURITY_SETTINGS を返すと、MSI は 8230 と表示しました。
HRESULT_CODE() でもしてるんじゃないでしょうか。
- 編集済み HomeCloset 2014年8月19日 6:06 API typo
-
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/
-
当方は、Flexera社のInstallShieldを使用して署名付きのインストーラを作成しているものです。
Installshieldの生成するcab形式は特殊なもので、(cab設計者の)Microsoftの期待しない形式ではと思います。例えばExplorerで中身を閲覧できましたっけ?そのような場合、Microsoft社のツールで通常のcab形式と思いデジタル署名しようとすると不完全な形になるのも当然かと。
開発元にも問い合わせましたが回避策が導きだせていない状態です。
この辺りはInstallshieldのバージョンにも依存します。回避策以前の問題として、当該Installshieldがデジタル署名対応か、また署名手順が適切なものかを確認してみてはどうでしょうか?