次の方法で共有


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

質問

2017年3月11日土曜日 2:51

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

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

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

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

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

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

アドバスどうぞ宜しくお願いいたします。

すべての返信 (16)

2017年3月12日日曜日 8:05 ✅回答済み | 1 票

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月11日土曜日 2:57

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

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

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

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

// TechNet フォーラム とのマルチのようなので、続けるのならそちらの方が良いですね。


2017年3月11日土曜日 4:34

お世話になります。
ご指摘どうもありがとうございます。

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

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

構文は間違っていないがデジタル署名としては不完全といった状況なのかもしれません。


2017年3月11日土曜日 5:00

対象のドライバーはカーネルモードドライバーでしょうか?
どういう署名をされているのでしょうか?
;明書はどのようなタイプで、きちんと購入されたものを利用されていますよね?

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

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

なお、カーネルモードドライバーの場合、Windows 10 では Microsoft に申請するなどの手続きを経ない限り、Anniversary Update 以降のプリインストール環境では利用できません。それらの手続きには EV ;明書が必要となってくるはずです。


2017年3月11日土曜日 8:18

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:51

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日土曜日 10:19

Gothelauth さんが示していただいているクロス;明書の話は参照されましたか?


2017年3月13日月曜日 2:10

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日月曜日 3:40

部分的にだけコメントします。

なんどか書かれていますが、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:47

私の方で実際に生じた事例を紹介します

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:52

説明が不足していました。
最新の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日月曜日 10:10

Azuleanさん
アドバイスどうもありがとうございます。

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

世の流れはEVコードサイニング;明書のようですが、
先日、コードサイニング;明書のまま更新してしまいました。


2017年3月13日月曜日 10:19

せれさん
アドバイスどうもありがとうございます。

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

どうもありがとうございました。


2017年3月13日月曜日 10:24

Gothelauthさん
アドバイスどうもありがとうございます。

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

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

どうもありがとうございました。


2017年3月13日月曜日 11:56

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

カーネルモードドライバーという前提ですが、先にも書きました通り、この方法で通用するのは 8.1 と 10 の一部までです。
Anniversary Update で条件を満たした環境は、この方法ではロードされません。
Microsoft の署名が必要なので、10 をサポート対象に加えるなら引き続き調査・対応してください。

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


2017年3月14日火曜日 2:59

Azuleanさん、どうもありがとうございます。

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

引き続き調査しようと思います。
どうもありがとうございました。