デバイスドライバーに自己署名する anchor.png

デジタル署名が無いデバイスドライバーは,Windows 10などでは通常インストール出来なくなっている。

古いデバイスドライバーなどのデジタル署名がないデバイスドライバーをWindows 10にインストールして使用できるようにするには,

  • デジタル署名を無視してインストールできるテストモードでWindows 10を再起動する
    Windows10で署名のないデバイスドライバを入れるで説明している方法でインストールする。
    しかしこの手順が結構めんどう。
  • デバイスドライバーに自己電子証明書でデジタル署名する
    これは本来認証局(またはMicrosoft)で発行した電子証明書を使ってのデジタル署名を,自分で勝手にしてしまう方法。
    この時,検証のためWindowsマシンの証明書ストアに自己署名証明書を信頼するように登録する必要がある。

のどちらかで,インストールすることが出来る。

ここでは,デバイスドライバー(例:catファイルを使用するデバイスドライバー)に勝手に作った自己電子証明書を使ってデジタル署名して,インストール出来るようにする手順を説明する。

Page Top

自己電子証明書の作成とWindowsマシンへの登録 anchor.png

デバイスドライバーにデジタル署名を追加するために使用する自己電子証明書を作成し,その自己電子証明書をWindowsマシンの証明書ストアに登録し,さらに検証用に自己署名証明書を証明書ストアに登録する。

この時,登録した自己署名証明書を信頼された証明書にする。

Page Top

自己電子証明書を作成する anchor.png

Windowsマシンへ自己電子証明書を作成して証明書ストアに登録する。

管理者権限でWindows Driver Kitが動作するコマンドプロンプトを立ち上げる。

まず,デバイスドライバー(catファイル)にデジタル署名する際に使用する自己電子証明書をmakecertコマンドで作成する。
-rオプションで自己署名証明書の作成を指定している。-nオプションでCN=での発行者が発行先にも指定される。-ssオプションは登録する証明書ストア名(登録場所:デフォルトはMy)になる。
これらを適当に指定して自己証明書xxxxxxxx.cer(cerファイルだが実際にはバイナリフォーマットderになる)を作成する。

> makecert -r -pe -n "CN=hogehoge CA" -ss "hogehogeStore" xxxxxxxx.cer

Microsoftのmakecertコマンドだと,デフォルトだと署名アルゴリズムがsha1になるので注意する。
署名アルゴリズムをsha256にする場合は,-a sha256のオプションを追加する*1必要がある。

うまくいくと,証明書ストアの-ssオプションで指定したところに署名用の電子証明書(秘密鍵付)が登録され,デジタル署名時に使用できるようになる。
また,コマンド実行したディレクトリに自己署名証明書(公開鍵付)xxxxxxxx.cerが作成される。この証明書はデジタル署名を検証する時に使用できる。

Page Top

自己署名証明書をWindowsマシンに登録する anchor.png

作成された自己署名証明書xxxxxxxx.cerを,第3者認証機関で発行した信頼のある証明書を登録するのと同じように,証明書ストアの信頼されたルート証明機関信頼された発行元に登録する。
これは,デバイスドライバーがインストールされる時にデジタル署名の検証がうまく行えるようにするため。

登録する時にWindows標準のcertutilコマンドが使用できるが,certmgrコマンドはWindows Driver Kit等をインストールしないと使用できない。

> certmgr -add xxxxxxxx.cer -s -r localMachine root
> certmgr -add xxxxxxxxe.cer -s -r localMachine trustedpublisher
 または
> certutil -addstore ROOT xxxxxxxx.cer
> certutil -addstore TrustedPublisher xxxxxxxx.cer

これで,作成した自己署名証明書がWindowsマシンに信頼された証明書として登録されて,デジタル署名の検証に使用できるようになる。

Page Top

デバイスドライバーに自己電子証明書でデジタル署名する anchor.png

署名がないデバイスドライバーに,自己電子証明書を使ってデジタル署名する。

ここでは,catファイルとinfファイルを使ったデバイスドライバーを想定している。

Page Top

デバイスドライバーのinfファイルからcatファイルを作成する anchor.png

まず,デバイスドライバーのinfファイルにcatファイル情報を追加する。
infファイルを編集し,[Version]のところの最後のラインに,

CatalogFile=xxxxxxxx.cat

と,catファイルの定義を追加する。

次にデバイスドライバーのinfファイルから,未署名のcatファイルを作成する。
このとき,/os:オプションで対象となるOSを指定する。カンマ区切りで複数の指定が出来る。inf2catをオプション無しで実行すると,使用できるOSリストが表示される。

> inf2cat /driver:infファイルが有るディレクトリ /os:10_X64,10_19H1_X64,...

これで,未署名のxxxxxxxx.catファイルが作成される。

Page Top

デバイスドライバーのcatファイルにデジタル署名を追加する anchor.png

上記で作成して証明書ストアに登録されている自己電子証明書(秘密鍵付)を利用して,sightoolコマンドを使ってデバイスドライバーのcatファイルにデジタル署名を追加する。
このとき,-nオプションで自己電子証明書を作成した時の発行先・発行者名を,-sオプションで証明書ストア名(登録場所)を指定する。

新しいバージョンのsigntoolコマンドだと,-fdオプションで署名アルゴリズムにsha1sha256を指定する(makecertで作成した署名用電子証明書のアルゴリズム)必要がある。
また,デバイスドライバーが複数のinfファイルが有る場合,catファイルにデジタル署名する場合はそのうちの一つを指定する必要がある。-aオプションを使うと複数の自己電子証明書(秘密鍵付)がある場合,自動的に最適な証明書を選択するようだ。その他多くのオプションが有る。

> signtool sign -v -n "hogehoge CA" -s hogehogeStore xxxxxxxx.cat
  もしくは
> signtool sign -fd sha1 -a -v -n "hogehoge CA" -s hogehogeStore xxxxxxxx.cat

これで,デバイスドライバーのcatファイルに自己電子証明書を使ってデジタル署名が出来た。

Page Top

デバイスドライバーをインストールする anchor.png

デバイスドライバーにデジタル署名が出来たら,デバイスをPCに接続してデバイスマネージャーを開く。
プラグ&プレイ(自動)でデバイスドライバーがインストール出来なかったデバイスに?が表示されているので,上記で作成したデバイスドライバーのディレクトリを指定すると,デバイスドライバーが無事インストールできた :)

別の人のWindowsへこのデジタル署名したデバイスドライバーをインストールするためには,作成した自己署名証明書をその人の証明書ストアの信頼されたルート証明機関と信頼された発行元に登録する必要がある。


*1 ((古いバージョンのmakecertコマンドだとsha1しか使えない。

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 5910, today: 6, yesterday: 0
最終更新: 2021-10-22 (金) 12:17:54 (JST) (889d) by yuji