Windows x64 で署名されていないドライバーに署名する方法 (Windows 11、10、8.1、7)
64ビット版Windowsで署名されていないドライバを扱うのは本当に面倒です。署名されていないドライバはセキュリティリスクとなるため、最近のWindowsはすべてデフォルトでブロックしています。古いハードウェアや署名されていないカスタムドライバを使っている場合、この面倒な状況を回避する方法がわからないかもしれません。そこで、ドライバに自分で署名するのが、こうした厄介なエラーを回避する確実な方法です。ただし、少し手間がかかります。最終的に目指すのは、Windowsが十分に信頼し、エラーを発生することなくインストールできる署名済みドライバパッケージです。特に`pnputil`などのツールを使用する場合はなおさらです。必ずしも簡単ではありませんが、以下の手順に従えば確実に実現可能です。独自の証明書を生成し、カタログファイルを作成し、`signtool`などのツールでファイルに署名する必要があります。思ったほど複雑ではありませんが、特に証明書とカタログファイルの処理にはある程度の時間がかかることを覚悟しておいてください。—
Windowsで署名のないドライバーのインストールを修正する方法 – ステップバイステップ
自己署名ドライバー証明書を作成する
これはいわばすべての基盤となるものです。Windowsは当然のことながら、自己署名証明書を自動的に信頼するわけではないので、自分で作成する必要があります。自己署名証明書は、Windowsがドライバーをインストールできる「正当な」証明書であると認識するのに役立ちます。メリット:ドライバーの署名に使用できる信頼されたルートCAを生成するため、Windowsのインストールに対する抵抗が軽減されます。適用対象:署名されていないドライバーをインストールしようとして、「サードパーティのINFにデジタル署名情報が含まれていません」などのエラーが表示される場合。期待される結果:信頼ストアに新しい自己署名コード署名証明書が追加されます。 方法: – まず、証明書用のディレクトリを作成します (例: `C:\DriverCert`) – 管理者として PowerShell を開き、次のコマンドを実行します: powershell $todaydate = Get-Date $add3year = $todaydate. AddYears(3) $cert = New-SelfSignedCertificate -Subject “WOSHUB” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My -NotAfter $add3year – この証明書をパスワード保護付きの PFX ファイル (たとえば、`P@ss0wrd`) にエクスポートします: powershell $CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password $CertPassword – 後で使用するために `.cer` ファイルも必要になります: powershell $certFile = Export-Certificate -Cert $cert -FilePath C:\DriverCert\drivecert.cer – 次に、証明書をWindowsの信頼されたルートストアと発行元ストアにインポートします(これにより、Windowsが証明書を受け入れるようになります)。powershell Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath C:\DriverCert\drivecert.cer Import-Certificate -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -FilePath C:\DriverCert\drivecert.cer ちょっとした注意点ですが、設定によっては、証明書が正しく登録されていない場合、`certlm.msc` を使って手動で証明書を追加する必要があるかもしれません。実用的なヒント: 設定によっては、Windowsが証明書をすぐに信頼しないことがあります。その場合は、再起動または再ログインが必要になるかもしれません。 —
ドライバーのカタログファイル (.CAT) を作成する
Windows は、すべてのドライバーファイルをハッシュ化し、改ざんされていないことを確認するカタログファイルを探します。役立つ理由:カタログファイルはドライバーファイルを署名に関連付けることで、Windows によるインストールをよりスムーズにします。適用対象:ドライバーファイル (.sys、.inf) が署名されていない場合、またはドライバーのインストールをスムーズにしたい場合。期待される結果:エラーなしで生成される `.cat` ファイル。方法: – ドライバーファイル (`xg20gr.sys`、`xg20gr.inf` など) をフォルダー (例: `C:\DriverCert\xg20`) にコピーします。 cmd md C:\DriverCert\xg20 xcopy c:\tools\drv1\*.* C:\DriverCert\xg20 /i /c /k /e /r /y – WDK の `inf2cat.exe` ツールを使用します: cmd “C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x86\inf2cat.exe” /driver:”C:\DriverCert\xg20″ /os:10_X64 /verbose > *注:* `inf2cat` が `DriverVer` に関するエラーをスローする場合は、`.inf` ファイルを編集します: `[Version]` セクションを見つけて、`DriverVer=05/01/2009, 9.9.9.9` のような最近の日付を設定します。これにより、Windows がドライバーが準拠していると誤認識することがあります。 —
証明書を使用してドライバーファイルに署名する
ここで、ドライバーに適切な署名が付与されます。メリット:すべてのドライバーファイルとカタログにデジタル署名することで、Windows がドライバー署名要件に準拠し、正常に動作するようになります。適用対象:安全な Windows システムに、署名されていないドライバーをエラーなくインストールする場合。期待される結果:ドライバー署名を含む署名済みカタログ (.cat) が作成されます。 方法: – 通常は WDK にある `signtool.exe` のあるディレクトリに切り替えます: cmd cd “C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64” – カタログ ファイルに署名します: cmd signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /tr http://timestamp.digicert.com /td SHA256 /v C:\DriverCert\xg20\xg20gr.cat *プロのヒント:* ダイジェスト アルゴリズムに関するエラーが発生した場合は、`/fd SHA256` を追加します。 – 署名を確認します: cmd signtool verify /v /pa C:\DriverCert\xg20\xg20gr.cat すべてがうまくいけば、成功を確認するメッセージが表示されます。 —
Windowsに署名されたドライバーをインストールする
もうすぐです。新しく署名したドライバーをインストールします。役立つ理由: 適切に署名されていれば、Windows はドライバーを信頼済みとして扱い、インストール中にブロックしません。適用されるタイミング: ドライバーに署名し、Windows がそれを正当なものとして認識できるようにした後。期待される結果: ドライバーが最終的にセキュリティ警告なしで正常にインストールされます。方法: – 管理者として `pnputil` コマンドを実行します: cmd pnputil /add-driver C:\DriverCert\xg20\xg20gr.inf /install – または、PowerShell またはコマンド プロンプトで管理者権限で `pnputil` コマンドを使用します: cmd pnputil -i -a C:\DriverCert\xg20\xg20gr.inf – インストール中に、Windows に「このデバイス ソフトウェアをインストールしますか?」というプロンプトが表示されるので、[インストール] をクリックします。 – インストールに失敗した場合は、`C:\Windows\inf\setupapi.dev.log` で手がかりを確認してください。通常、「署名の検証に失敗しました」などのエラーは、ドライバーの証明書が信頼されていないことを意味します。証明書が 信頼されたルート と 信頼された発行元 にインポートされていることを確認してください。—
カーネルドライバーとセキュアブートに関する特別な注意
カーネルモードドライバーを扱っていて、セキュアブートが有効になっている場合、状況はさらに複雑になります。自作の証明書で署名されたカーネルドライバーは、通常、Microsoft によって適切に署名されているか WHQL 認証されていない限り、セキュアブートが有効になっている状態では読み込まれません。この問題を回避するには、次の操作を行います。- BIOS 経由でセキュアブートを一時的に無効にする、または – 有効な Microsoft 署名証明書を使用してカーネルドライバーに署名する(Windows Hardware Lab Kit と WHQL プロセスを使用する)必要があります。ユーザーモードドライバーの場合、これは通常大きな問題にはなりません。適切に署名されているか、システムがテストモード(bcdedit /set testsigning on)に設定されている限り、セキュアブートが有効になっている状態でも実行できます。—
まとめ
- 自己署名コード署名証明書を作成し、信頼できるストアにインポートします。
- ドライバー ファイルのカタログ (.cat) ファイルを生成します。
- タイムスタンプを含めて、`signtool` を使用してカタログ ファイル (および必要に応じてドライバー ファイル) に署名します。
- 署名が有効になったので、`pnputil` を使用してドライバーをインストールします。
まとめ
このプロセスは最速ではありませんが、署名されていないドライバをインストールしようとするたびにWindowsと格闘するよりはずっと楽です。ドライバに署名しておけば、今後のインストールはよりスムーズになります。特にカスタムハードウェアやテストドライバを開発している場合はなおさらです。この方法が役に立ち、古いハードウェアが面倒な手続きなしに使えるようになることを願っています。