Windowsで署名されていないデバイスドライバーに署名する方法は?
デフォルトでは、すべての64ビットWindowsバージョンは、有効なデジタル署名で署名されていないデバイスドライバーのインストールを防ぎます。署名されていないドライバーは、オペレーティングシステムによってブロックされます。デジタル署名により、信頼できる開発者またはベンダーによってドライバーがリリースされ、そのコードが変更されていないことが保証されます。
Windowsで署名されていないドライバーのドライバー署名検証を無効にする方法はいくつかあります(GPO、テストブートモードなどを使用)。今日は、Windowsx64用の署名されていないドライバーに署名する方法を紹介します。 (このガイドは、Windows 11、10、8.1、および7に適用されます。)
内容:
- 自己署名ドライバー証明書を作成する
- ドライバーパッケージに署名するためのカタログファイル(CAT)の作成
- 自己署名証明書を使用してドライバーパッケージに署名する
- Windowsへの自己署名ドライバーのインストール
- Windowsのユーザーモードおよびカーネルモードドライバー
Windows 10 x64用の特定の署名されていないデバイスドライバー(デジタル署名なし)があるとします。この例では、これはかなり古いグラフィックカードのドライバです。お使いのWindowsバージョンのドライバーを含むアーカイブがベンダーのWebサイトからダウンロードされ(Windows Vista x64のビデオドライバーバージョンのみを見つけることができました)、その内容が c:\ tools \ drv1\<に抽出されました。 / em> 。 pnputilが組み込まれたWindowsドライバーストアにドライバーを追加してインストールしてみましょう。 ツール:
Pnputil –a c:\ tools \ drv1 \ xg20gr.inf
ドライバーのインストール中に、Windows 7は、オペレーティングシステムがこのドライバーのデジタル署名を検証できないという警告を表示します。
Windows can’t verify the publisher of this driver software.
Windows 10(21H2)では、この警告は表示されませんが、コンソールにエラーが表示されます:
Processing inf: xg20gr.inf Adding the driver package failed: The third-party INF does not contain digital signature information.
infドライバファイルを右クリックして、インストールを選択した場合 ファイルエクスプローラーからドライバーをインストールすると、エラーが発生します:
The third-party INF does not contain digital signature information.
自己署名証明書を使用してこのドライバーに署名してみましょう。
署名を生成してドライバーに署名するには、次のWindowsアプリケーション開発ツールをダウンロードしてインストールする必要があります。
- Windows SDK (ソフトウェア開発キット)またはWindowsバージョン用のMicrosoft VisualStudio2005+。 デスクトップ用のWindowsSDK署名ツールをインストールします
signtool.exe
を含むパッケージ; - Windows Driver Kit(WDK) — https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
システムドライブのルートにC:\DriverCertフォルダーを作成します。
New-SelfSifgnedCertificate PowerShellコマンドレットを使用して、コード署名証明書を作成できます。この例では、有効期間が3年の自己署名証明書を作成します。
$ todaydate =Get-Date
$ add3year =$ todaydate.AddYears(3)
$ cert =New-SelfSignedCertificate -Subject "WOSHUB" -Type CodeSigningCert -CertStoreLocation cert:\ LocalMachine \ My- $add3yearの後
次に、この証明書をパスワードを使用してpfxファイルにエクスポートする必要があります:
$ CertPassword =ConvertTo-SecureString -String“ P @ ss0wrd” -Force –AsPlainText
Export-PfxCertificate -Cert $ cert -FilePath C:\ DriverCert \ myDrivers.pfx -Password $ CertPassword
作成した証明書は自己署名であるため、Windowsはデフォルトでそれを信頼しません。 Sigcheckユーティリティを使用して証明書ストアを確認すると、この証明書はMicrosoftの信頼されたルート証明書のリストにリストされていないため、信頼できないものとして表示されます(このリストは定期的に更新する必要があります)。
次に、信頼されたルートストアと信頼された発行元の証明書に証明書を追加する必要があります。
$ certFile =Export-Certificate -Cert $ cert -FilePath C:\ DriverCert \ drivecert.cer
Import-Certificate -CertStoreLocation Cert:\ LocalMachine \ AuthRoot -FilePath $ certFile.FullName
Import-証明書-CertStoreLocationCert:\ LocalMachine \ TrustedPublisher -FilePath $ certFile.FullName
以前のバージョンのWindowsでは、 makecert.exe
を使用する必要があります 自己署名証明書を生成するためのWindowsソフトウェア開発キット(SDK)のツール。この場合、証明書を作成するためのコマンドは次のようになります。
cd“ C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1 \ bin”
WinOSHub社などに対して発行される自己署名証明書と秘密鍵を作成します。
makecert -r -sv C:\ DriverCert \ myDrivers.pvk -n CN ="WinOSHub" C:\ DriverCert \ myDrivers.cer
証明書の作成中に、ツールはキーのパスワードを指定するように求めます。 P @ ss0wrdとします 。
以前に作成した発行者証明書(PKSC)の公開鍵を作成します:
cert2spc C:\ DriverCert \ myDrivers.cer C:\ DriverCert \ myDrivers.spc
公開鍵(.spc)と秘密鍵(.pvk)を、個人情報交換(.pfx)形式の単一の証明書ファイルに結合します。
pvk2pfx -pvk C:\ DriverCert \ myDrivers.pvk -pi P @ ss0wrd -spc C:\ DriverCert \ myDrivers.spc -pfx C:\ DriverCert \ myDrivers.pfx -po P @ ss0wrd
証明書をtrustedに追加します:
certmgr.exe -add C:\ DriverCert \ myDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:\ DriverCert \ myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER
ADドメインのグループポリシーを使用して、この証明書をクライアントコンピューターに一元的に展開できます。
マシンのローカル証明書管理スナップイン( certlm.msc
)を開きます )証明書が信頼できる発行元と信頼できるルート証明機関にあることを確認します。
注 。証明書の有効期間は限られていますが、CodeSigning証明書の有効期限が切れると、新しい署名を作成できなくなります。この証明書によってすでに署名されているドライバーの有効性は無制限です(または古い署名は指定されたタイムスタンプの間有効です)。
ドライバーパッケージに署名するためのカタログファイル(CAT)の作成
ディレクトリC:\ DriverCert \ xg20を作成します アーカイブのドライバーが最初に抽出されたフォルダー( c:\ tools \ drv1 \
)からすべてのファイルをコピーします。 )。拡張子が.sysのファイルがあることを確認してください および.inf これらのファイルの中で(この場合、xg20grp.sysとxg20gr.infです)。
md C:\ DriverCert \ xg
xcopy c:\ tools \ drv1 \ C:\ DriverCert \ xg / i / c / k / e / r / y
ディレクトリに移動します:
cd“ C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.22000.0 \ x86”
INFファイルに基づいてCATファイル(ドライバーパッケージ内のすべてのファイルに関する情報を含む)を生成します。 inf2cat.exe ツール(Windows Driver Kit、WDKから)を使用すると、プラットフォーム用のCATファイルを生成できます:
inf2cat.exe / driver: "C:\ DriverCert \ xg20" / os:7_X64 / verbose
手順が正しいことを確認するには、ファイルC:\ DriverCert \ xg \ xg20gr.catを確認してください。 ターゲットディレクトリに表示され、ログにメッセージがあります:
Signability test complete.
および
Catalog generation complete.注 。私の場合、コマンドInf2Cat.exeがエラーを返しました:
Signability test failed. Errors: 22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \hdx861a.inf
エラーを修正するには、 [Version]
でDriverVer=の行を見つけます。 セクションを作成し、次のように置き換えます:
DriverVer=05/01/2009,9.9.9.9
エラーが発生した場合MissingAMD64 CatalogFile entry
(x64の場合)または32ビットのCatalogFileエントリがありません
次に、CatalogFile=xg20gr.catという行を.infファイルの[Version]セクションに追加します。
次のフォルダに移動します:
タイムスタンプサービスとしてVerisignを使用して、以前に作成した証明書でドライバーパッケージ(ファイルのセット)に署名します。次のコマンドは、パスワードで保護された.pfxファイルに保存されている証明書を使用してデジタル署名でCATファイルに署名します。
最新バージョンのWindows10およびWindows11では、このコマンドを実行するとエラーが発生します:
別のコマンドを使用する必要があります:
cd "C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.22000.0 \ x64"
signtool sign / f C:\ DriverCert \ myDrivers.pfx / p P@ss0wrd / t https://timestamp.verisign.com/scripts/timstamp.dll / v C:\ DriverCert \ xg20 \ xg20gr.cat
SignTool Error: No file digest algorithm specified. Please specify the digest algorithm with the /fd flag. Using /fd SHA256 is recommended and more secure than SHA1. Calling signtool with /fd sha1 is equivalent to the previous behavior. In order to select the hash algorithm used in the signing certificate's signature, use the /fd certHash option.
signtool sign / tr https://timestamp.digicert.com / td SHA256 / v / f C:\ DriverCert \ myDrivers.pfx / p P@ss0wrd "C:\ DriverCert \ xg \ xg20gr.cat" コード>
SignToolエラー:予期しない内部エラーが発生しました
、またはエラー情報:SignerTimeStamp()が失敗しました。 (-2147012865 / 0x80072eff)
、別のタイムスタンプサーバーのURLを試してください。リストのいずれかを試してください:
https://timestamp.comodoca.com/authenticode https://timestamp.globalsign.com/scripts/timstamp.dll https://timestamp.verisign.com/scripts/timstamp.dll https://tsa.starfieldtech.com https://www.startssl.com/timestamp
CATファイルが正常に署名されると、次のメッセージが表示されます。
Successfully signed: C:\DriverCert\xg\xg20gr.cat Number of files successfully Signed: 1
ドライバーのデジタル署名は、.infファイルで参照される.catファイルに含まれています。次のコマンドを使用して、catファイル内のドライバーのデジタル署名を確認できます。
SignTool verify / v / pa c:\ DriverCert \ xg \ xg20gr.cat
デジタル署名のCATファイルのプロパティで証明書に関する情報を確認することもできます。 タブ。
証明書が信頼されていない場合(または信頼されたルート証明書ストアに追加されていない場合)、 SignTool verify
の実行時にエラーが表示されます。 コマンド:
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.CATファイルには、ドライバディレクトリにあるすべてのファイル( CopyFiles のINFファイルにリストされているファイル)のデジタル署名(拇印)が含まれています。 セクション)。これらのファイルのいずれかが変更された場合、ファイルのチェックサムはCATファイルのデータと一致せず、その結果、そのようなドライバーのインストールは失敗します。
Windowsへの自己署名ドライバーのインストール
次のコマンドを使用して、再度署名したドライバーをインストールしてみてください:
Pnputil –i –a C:\ DriverCert \ xg20 \ xg20gr.inf
これで、ドライバーのデジタル署名が欠落しているという警告は表示されなくなります。
システム上のデバイスにドライバが正常にインストールされました。
ドライバパッケージが正常に追加されました。
次の警告がWindows10および11に表示されます。
Would you like to install this device software?
「インストール」をクリックします Windowsにドライバパッケージをインストールします。
何らかの理由でドライバがインストールされていない場合、詳細なドライバインストールログがファイル C:\ Windows \ inf \ setupapi.dev.logに含まれています。 。このログファイルを使用すると、ドライバのインストールエラーに関する詳細情報を取得できます。ほとんどの場合、「ドライバーパッケージが署名の検証に失敗しました " エラー。ほとんどの場合、これは、ドライバーの証明書が信頼できる証明書ストアに追加されていないことを意味します。
ドライバーのインストールが成功した場合は、 setupapi.dev.log
ファイルには次の行が含まれている必要があります:
>>> [Device Install (DiInstallDriver) - C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf] >>> Section start 2018/07/22 23:32:57.015 cmd: Pnputil -i -a c:\DriverCert\xg\xg20gr.inf ndv: Flags: 0x00000000 ndv: INF path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf inf: {SetupCopyOEMInf: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf} 13:23:37.046 inf: Copy style: 0x00000000 inf: Driver Store Path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077 <<< Section end 2018/07/22 13:23:37.155 <<< [Exit status: SUCCESS]
Windowsのユーザーモードおよびカーネルモードドライバー
Windowsでは、ドライバーはカーネルモードまたはユーザーモードで実行できることを思い出してください。この方法で署名されたカーネルモードドライバーは、セキュアブートが有効になっているUEFIデバイスでWindowsが起動し、エラーが発生した場合に読み込まれません:
Event ID: 7000 ERROR_DRIVER_BLOCKED 1275 (0x4FB) This driver has been blocked from loading.
PowerShellコマンドを使用して、セキュアブートモードが有効になっているかどうかを確認できます。
Confirm-SecureBootUEFI
SecureBootが有効になっているすべてのカーネルモードドライバーは、Microsoft認定プロセス(WHQL – Windows Hardware Quality Lab)中に署名する必要があります。その理由は、カーネルがロードされると、UEFIはWindowsローカルマシン証明書ストアの証明書を検証できないためです。
SignTool Error: Signing Cert does not chain to a Microsoft Code Verification Root.
Microsoftは、Windows101607以降のWindowsハードウェア互換性プログラムに基づく必須のサードパーティドライバー認定を要求しています。
自己署名されたユーザーモードドライバー(通常、プリンター、スキャナー、プロッターなど)は、SecureBootが有効になっている場合でも機能します。
カーネルモードドライバーの場合、デジタル署名の検証を無効にし、Windowsをテストモードで起動する必要があります。 bcdedit.exeコマンドを使用する場合:
bcdedit.exe / set / nointegritychecks on
bcdedit.exe / set testsigning ON
-
Windows 10 で Bluetooth を有効にする方法
現在、ほとんどの PC には Bluetooth 機能が搭載されており、外部 Bluetooth スピーカーなどの Bluetooth デバイスに接続するのに役立ちます。 PC に Bluetooth が搭載されているが、その使用方法がわからない場合は、このガイドで Windows 10 PC で Bluetooth をオンにする方法を説明します。 このガイドの最後では、Windows 10 で Bluetooth を有効にする方法と、Windows 10 で Bluetooth を使用する方法を学習しました。これらのことを学びたいと思っていると確信しており、それらに取り掛かりましょう: パ
-
4 つの方法:Windows 10 でドライバ エラー コード 32 を修正する方法
ドライバー エラー コード 32 は、特定のハードウェアのドライバーが何らかの理由で無効になったときに発生する一般的なデバイス マネージャー エラーです。 Windows が特定のコンポーネントのハードウェア ドライバーを検出できない場合、画面に次のメッセージが表示されます。 コンピューティング分野では、デバイス ドライバーは非常に重要です。実際、ドライバーはハードウェア デバイスとオペレーティング システムの間の仲介リンクとして機能し、それらの機能を制御します。そのため、特定のドライバーが応答しない場合は、すぐに修正する必要があります。ドライバーの障害は、古いドライバー、破損