none
デバイスドライバインストール時のデジタル署名エラー52について RRS feed

  • 質問

  • お世話になります。
    お分かりになる方、どうぞ宜しくお願いいたします。

    デバイスドライバのインストール時、デジタル署名を検証できないとして
    以下のメッセージが表示されます。

    「このデバイスに必要なドライバーのデジタル署名を検証できません。
    ハードウェアまたはソフトウェアに最近加えられた変更により、
    正しく署名されていないファイルや破損したファイルがインストール
    された可能性があります。また、出所の不明な悪意のあるソフトウェア
    であることも考えられます。(コード52)」

    フォーラム内に「システムファイルチェッカー」を使用すると改善できた
    との書き込みがありましたが、原因は何なのか、対策は可能なのかを
    ご存知の方はいらっしゃいますでしょうか。

    当方では、64bitOSで発生しています。
    ・Windows7 64bit
    ・Windows8.1 64bit
    ・Windows10 64bit

    catファイルなどのプロパティを見るとデジタル署名されていると
    表示されているのですが、実際にインストールしようとするとエラーが
    発生する状況です。

    アドバスどうぞ宜しくお願いいたします。
    2017年3月11日 2:51

回答

  • signtool のコマンドをみると、クロス証明書が証明書チェーンに含まれていないようです。
    下記リンク先の「5.からログファイルの署名」で記述されていますので、ご確認ください。
     ドライバーの Authenticode 署名の方法

    下記が正しく設定されていれば、Windows 7 x64でインストールできると思います。
     ・signtoolで証明書チェーンを正しく設定する
     ・Windows 7 SP1 にsha2対応用のKBを適用する。
      Windows 7 および Windows Server 2008 R2 で SHA-2 コード署名サポートを利用可能

    また、以降はWindows 10についてです。
    inf2catで10_X64を指定されていますが、これはWindows 10 RTMを指します。
    その後リリースされた、TH2, AUはRTMとは別にカタログ情報が追加されました。

    そのため、Windows 10 TH2以降ではインストールに失敗する可能性が高いです。
    Windows10でAuthentication署名をするには、MicrosoftのDashboard Serviceで署名する必要があります。
     →Dashboard Serviceを利用するには、EV証明書が必要になります。

    2017年3月12日 8:05

すべての返信

  • ドライバーの開発者ではなく、ドライバーの利用者としてのご質問なのですよね?

    Windows の問題だと考えられる場合は Microsoft Community でお尋ねください。
    (フォーラムレベルの回答では不満を感じる場合は、Microsoft の有償サポートを利用してください)

    ドライバーの問題だと考えられる場合はドライバーの提供者にお尋ねください。

    なお、このフォーラムは開発者が自身で開発するものに関して扱うこと場所になっています。


    // TechNet フォーラム とのマルチのようなので、続けるのならそちらの方が良いですね。
    2017年3月11日 2:57
    モデレータ
  • お世話になります。
    ご指摘どうもありがとうございます。

    デバイスドライバは弊社製ではありませんが、デジタル署名は弊社で行っています。
    ですので、デジタル署名に関しては開発者です。

    signtoolの実行結果は"成功"と表示され、ファイルのプロパティを見ても
    デジタル署名されていると表示されます。

    構文は間違っていないがデジタル署名としては不完全といった状況なのかもしれません。
    2017年3月11日 4:34
  • 対象のドライバーはカーネルモードドライバーでしょうか?
    どういう署名をされているのでしょうか?
    証明書はどのようなタイプで、きちんと購入されたものを利用されていますよね?

    古い内容ですが、この記事 に出てくる事例集だと、署名されていないか、あるべき証明書を使って署名されていないかのケースでコード 52(図 3,4)が表示されるとあります。
    (カーネルモードドライバーでテスト証明書を使っている、カーネルモードドライバーで正しく署名されていない)

    signtool で成功とか、cat ファイルで署名されているとかは確認方法として妥当とは言い切れないので、どういったものを使い、どういった署名をしているのかのあたりも触れてもらった方がよいでしょう。


    なお、カーネルモードドライバーの場合、Windows 10 では Microsoft に申請するなどの手続きを経ない限り、Anniversary Update 以降のプリインストール環境では利用できません。それらの手続きには EV 証明書が必要となってくるはずです。
    2017年3月11日 5:00
    モデレータ
  • Windows OSでのAuthentication署名は、大きく下記の2種類の方法に分類されます。

    Windows10
     Azuleanさんが回答されているように、MicrosoftのDashboard Serviceを利用して署名する必要があります。
     Dashboard Service内で、署名対象のOSを選択してFile signing submissionを行います。
      →対象OSとして、Windows 10 AU, TH2などが選択できます。

    Windows 8.1以前
     Windows8.1以前のOSではSigntoolを使用して署名しますが、いくつが注意事項があります。

     ・クロス証明書との証明書チェーン構築
      Authentication署名では、Microsoftのクロス証明書と証明書チェーンを実現する必要があります。
      詳細は、下記Microsoft Blogサイトでまとめられています。
       ドライバーの Authenticode 署名の方法

     ・証明書のsha1, sha2について
      Windows 7以前はsha1のみ、 Windows 7 SP1以降はsha1, sha2に両方に対応しています。
       ※Windows 7 SP1はWindows Updateでsha2対応しましたので、サポートしない環境も存在しています。

      使用する証明書は、想定しているユーザーに合わせてsha1かsha2を選択する必要があります。
      詳細は、下記サイトにまとめられています。
       Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について
      sha1証明書を使用する場合は、対象にVista OSが含まれていなければなりません。
      catファイル生成の時に、Vistaのカタログ情報を指定する様にしてください。


    2017年3月11日 8:18
  • Azuleanさん、Gothelauthさん
    アドバイスどうもありがとうございます。

    弊社で使用している証明書は、EVではない通常のコードサイニング証明書です。
    4月末で期限が切れそうですが、購入したものです。

    ドライバ開発元からsysとinfのファイルを提供して頂き、
    弊社でデジタル署名を行いました。

    以下の手順で署名を行いました。
    ※sysとcatは同じフォルダに保存しています。

    【手順1】
    signtoolを使用してsysファイルにデジタル署名を実施。
    signtool sign /fd sha256 /f [pfxファイル] /p [パスワード] /tr [タイムスタンプサーバURL] /v [sysファイル]

    【手順2】
    inf2catを使用してcatファイルの生成。
    inf2cat /os:7_X64,8_X64,6_3_X64,10_X64 /driver:[sys,infを保存しているフォルダ]

    【手順3】
    signtoolを使用してcatファイルにデジタル署名を実施。
    signtool sign /fd sha256 /f [pfxファイル] /p [パスワード] /tr [タイムスタンプサーバURL] /v [catファイル]

    デバイスドライバがカーネルモードかユーザモードか分からなくても
    Windows8.1 64bitでインストールの動作確認できればと思ったのですが、
    それでもコード52のエラーが発生しました。

    sha2を使用していますが、Windows8.1 64bitでインストールの動作確認をしましたので、
    sha2の使用に関しては問題ないと思います。

    証明書のインストールからやり直してみた方が良いでしょうか。
    出口が見えない辛い状況になっています。
    2017年3月11日 8:51
  • Gothelauth さんが示していただいているクロス証明書の話は参照されましたか?
    2017年3月11日 10:19
    モデレータ
  • signtool のコマンドをみると、クロス証明書が証明書チェーンに含まれていないようです。
    下記リンク先の「5.からログファイルの署名」で記述されていますので、ご確認ください。
     ドライバーの Authenticode 署名の方法

    下記が正しく設定されていれば、Windows 7 x64でインストールできると思います。
     ・signtoolで証明書チェーンを正しく設定する
     ・Windows 7 SP1 にsha2対応用のKBを適用する。
      Windows 7 および Windows Server 2008 R2 で SHA-2 コード署名サポートを利用可能

    また、以降はWindows 10についてです。
    inf2catで10_X64を指定されていますが、これはWindows 10 RTMを指します。
    その後リリースされた、TH2, AUはRTMとは別にカタログ情報が追加されました。

    そのため、Windows 10 TH2以降ではインストールに失敗する可能性が高いです。
    Windows10でAuthentication署名をするには、MicrosoftのDashboard Serviceで署名する必要があります。
     →Dashboard Serviceを利用するには、EV証明書が必要になります。

    2017年3月12日 8:05
  • Azuleanさん、Gothelauthさん
    アドバイスどうもありがとうございます。

    認証局のドキュメントを参照し、以下のコマンドでも行ってみたのですがエラーとなってしまいました。

    【手順1】
    signtoolを使用してsysファイルにデジタル署名を実施。
    signtool sign /fd sha256 /ac [cerファイル] /f [pfxファイル] /p [パスワード] /tr [タイムスタンプサーバURL] /v [sysファイル]

    【手順2】
    inf2catを使用してcatファイルの生成。
    inf2cat /os:7_X64,8_X64,6_3_X64,10_X64 /driver:[sys,infファイルを保存しているフォルダ]

    【手順3】
    signtoolを使用してcatファイルにデジタル署名を実施。
    signtool sign /fd sha256 /ac [cerファイル] /f [pfxファイル] /p [パスワード] /tr [タイムスタンプサーバURL] /v [catファイル]

    紹介頂きました「ドライバーの Authenticode 署名の方法」をもう一度読み直してみます。

    inf2catの10_X64はRTMのこととご指摘頂きました。弊社で使用しているinf2catなどのツールが古いのかもしれません。
    ちなみに引数の文字列をご存知でしょうか。マイクロソフトのホームページでinf2catのドキュメントを見ても
    Windows10の記載がありません。

    Windows10でもユーザモードのデバイスドライバならAuthentication署名とコードサイニング証明書でも大丈夫と思いますが
    いかがでしょうか。デバイスドライバ開発元からはカーネルモードと言われていますが、その反面、EVでない通常版の
    コードサイニング証明書で大丈夫とも言われています。実際、開発元はコードサイニング証明書を使っているそうです。
    2017年3月13日 2:10
  • 部分的にだけコメントします。

    なんどか書かれていますが、EV 証明書不要でいけるのは 7, 8.1 と少し前の 10 までです。Anniversary Update 以降のセキュアブート有効でクリーンインストールした環境では Microsoft による署名が必須になっています。

    https://blogs.msdn.microsoft.com/jpwdkblog/2016/10/26/windows-10-anniversary-update-signing-policy/


    2017年3月13日 3:40
    モデレータ
  • 私の方で実際に生じた事例を紹介します

    1. 中間CA証明書をインストールしているかを確認(手順1の前)
    Symantec社の場合、CerMgrを起動して[中間証明機関]-[証明書]に「Symantec Class3 SHA256 Code Signing CA」にあればインストール済
    なければ、Symantec社公式ページからコードサイニング証明書SHA-2中間CA証明書(製品共通)を取得してインストール

    2.クロスルート設定用証明書(共通)の指定(手順3)
    Microsoft社で公開されているカーネルモードのコード署名用クロス証明書を指定すること
    →/acで間違えて1.中間CA証明書を指定してエラー52になった経験があります

    参考になれば幸いです

    2017年3月13日 3:47
  • 説明が不足していました。
    最新のinf2catでは、Windows 10向けの引数が削除されているはずです。
    これは、MicrosoftのDashboard Serviceで申請して取得する方式に変更されたためです。
    そのため、catファイルにTH2やAUのカタログ情報を追加するのは、Dashboard Serviceでのみ可能になっています。

    signtoolで使用する証明書は、コードサイニング証明書で問題ありません。
    ただ、MicrosofのDashboard Serviceに申請するcabファイルは、EV証明書で署名する必要があります。
    そのため、Windows 10でAuthentication署名を申請する場合は、EV証明書が必要になります。
    (実際は、create file signing submissionという申請名です。)

    あと、念のためですが、証明書チェーンに追加したクロス証明書が正しいか確認した方が良いかもしれません。
     ・コードサイニング証明書の発行元を含んでいる
     ・sha256のクロス証明書を使用している。

    最新の証明書は、下記リンク先にあります。
     Cross-Certificates for Kernel Mode Code Signing

    2017年3月13日 3:52
  • Azuleanさん
    アドバイスどうもありがとうございます。

    コードサイニング証明書の有効範囲について承知しました。
    どうもありがとうございます。

    世の流れはEVコードサイニング証明書のようですが、
    先日、コードサイニング証明書のまま更新してしまいました。
    2017年3月13日 10:10
  • せれさん
    アドバイスどうもありがとうございます。

    完全に勘違いをしていました。
    みなさんが"クロス証明書"と言ってらしたのと、
    シマンテックのドキュメント内の"クロスルート設定用証明書"が同じものと
    勘違いしており、クロス証明書は適用済と思っていました。
    マイクロソフトから"カーネルモードのコード署名用クロス証明書"をダウンロード
    して指定したところ、エラーが出なくなりました。

    どうもありがとうございました。
    2017年3月13日 10:19
  • Gothelauthさん
    アドバイスどうもありがとうございます。

    「ドライバーの Authenticode 署名の方法」の通り行ったところ、
    エラーが出なくなりました。どうもありがとうございます。

    電子署名のしくみについて、少し理解が進んだように思いますが、
    もっと勉強しないと、またどこかでつまづきそうです。

    どうもありがとうございました。
    2017年3月13日 10:24
  • 「ドライバーの Authenticode 署名の方法」の通り行ったところ、
    エラーが出なくなりました。どうもありがとうございます。
    カーネルモードドライバーという前提ですが、先にも書きました通り、この方法で通用するのは 8.1 と 10 の一部までです。
    Anniversary Update で条件を満たした環境は、この方法ではロードされません。
    Microsoft の署名が必要なので、10 をサポート対象に加えるなら引き続き調査・対応してください。

    なお、コードサインニング署名の手法で行く場合、8.1 までのドライバーと 10 のドライバーを分けることになります。
    それがいやな場合は HCK できちんとテストするなどが必要となるので手間は非常に大きくなります。

    2017年3月13日 11:56
    モデレータ
  • Azuleanさん、どうもありがとうございます。

    デバイスドライバがカーネルモードだった場合、Windows10のAnniversary Update以降は
    Microsoftの署名が必要であり、それには、EV証明書が必要ということで承知しました。

    引き続き調査しようと思います。
    どうもありがとうございました。
    2017年3月14日 2:59