デジタル署名が無いデバイスドライバーは,Windows 10などでは通常インストール出来なくなっている。
古いデバイスドライバーなどのデジタル署名がないデバイスドライバーをWindows 10にインストールして使用できるようにするには,
のどちらかで,インストールすることが出来る。
ここでは,デバイスドライバー(例:catファイルを使用するデバイスドライバー)に勝手に作った自己電子証明書を使ってデジタル署名して,インストール出来るようにする手順を説明する。
デバイスドライバーにデジタル署名を追加するために使用する自己電子証明書を作成し,その自己電子証明書をWindowsマシンの証明書ストアに登録し,さらに検証用に自己署名証明書を証明書ストアに登録する。
この時,登録した自己署名証明書を信頼された証明書にする。
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が作成される。この証明書はデジタル署名を検証する時に使用できる。
作成された自己署名証明書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マシンに信頼された証明書として登録されて,デジタル署名の検証に使用できるようになる。
署名がないデバイスドライバーに,自己電子証明書を使ってデジタル署名する。
ここでは,catファイルとinfファイルを使ったデバイスドライバーを想定している。
まず,デバイスドライバーの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ファイルが作成される。
上記で作成して証明書ストアに登録されている自己電子証明書(秘密鍵付)を利用して,sightoolコマンドを使ってデバイスドライバーのcatファイルにデジタル署名を追加する。
このとき,-nオプションで自己電子証明書を作成した時の発行先・発行者名を,-sオプションで証明書ストア名(登録場所)を指定する。
新しいバージョンのsigntoolコマンドだと,-fdオプションで署名アルゴリズムにsha1かsha256を指定する(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ファイルに自己電子証明書を使ってデジタル署名が出来た。
新しくコメントをつける