1: 2021-09-07 (火) 09:00:28 yuji |
現: 2021-10-22 (金) 12:17:54 yuji |
| - デジタル署名を無視してインストールできるテストモードでWindows 10を再起動する~ | | - デジタル署名を無視してインストールできるテストモードでWindows 10を再起動する~ |
| [[Windows10で署名のないデバイスドライバを入れる>/PC/Windows/Windows10で署名のないデバイスドライバを入れる]]で説明している方法でインストールする。~ | | [[Windows10で署名のないデバイスドライバを入れる>/PC/Windows/Windows10で署名のないデバイスドライバを入れる]]で説明している方法でインストールする。~ |
- | しかし手順が結構めんどうではある。~ | + | しかしこの手順が結構めんどう。~ |
- | - デバイスドライバーに自己署名する~ | + | - デバイスドライバーに自己電子証明書でデジタル署名する~ |
- | これは本来認証機関で行う承認した上でのデジタル署名を,自分で勝手にしてしまう方法。~ | + | これは本来認証局(またはMicrosoft)で発行した電子証明書を使ってのデジタル署名を,自分で勝手にしてしまう方法。~ |
- | この時,Windowsマシンに自己証明書が信頼されているように登録する必要がある。 | + | この時,検証のためWindowsマシンの証明書ストアに自己署名証明書を信頼するように登録する必要がある。 |
| | | |
| のどちらかで,インストールすることが出来る。 | | のどちらかで,インストールすることが出来る。 |
| | | |
- | ここでは,デバイスドライバーに自己署名してインストール出来るようにする手順を説明する。~ | + | ここでは,デバイスドライバー(例:catファイルを使用するデバイスドライバー)に勝手に作った自己電子証明書を使ってデジタル署名して,インストール出来るようにしてみた。~ |
| | | |
- | ** 自己証明書を作成する [#z67e8743] | + | ** 自己電子証明書の作成とWindowsマシンへの登録 [#m16020bc] |
- | 管理者権限で[[Windows Driver Kit>https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk]]が動作するコマンドプロンプトを立ち上げる。~ | + | デバイスドライバーにデジタル署名を追加するために使用する自己電子証明書を作成し,その自己電子証明書をWindowsマシンの証明書ストアに登録し,さらに検証用に自己署名証明書を証明書ストアに登録する。~ |
| | | |
- | デバイスドライバーのcatファイルのデジタル署名の際に使用する証明書を作成する。~ | + | この時,登録した自己署名証明書を信頼された証明書にする。 |
- | > makecert -r -pe -n "CN=hogehoge CA" -ss "hogehogeStore" xxxxxxxx.cer | + | |
- | として,証明書を作成する。~ | + | |
- | CNは発行先名で-ssはディレクトリ名なので,適当に指定して自己証明書を作成する。~ | + | |
| | | |
- | ** 自己証明書のWindowsマシンへの登録 [#m16020bc] | + | *** 自己電子証明書を作成する [#kd1373b8] |
- | デバイスドライバー署名するために使用する自己証明書を作成し,それをWindowsマシンに登録する。 | + | 自己電子証明書を作成する詳細は,[[オレオレ電子証明書の作成>/PC/デジタル署名とタイムスタンプ/オレオレ電子証明書の作成]]を参照する。~ |
| + | |
| + | Windowsマシンへ自己電子証明書(秘密鍵を含む)をを作成して,証明書ストアに登録する。登録すると署名ツールでデジタル署名する時に使用できるようになる。~ |
| | | |
- | *** 自己証明書を登録する [#kd1373b8] | |
- | Windowsマシンへ,以下のようにして自己証明書を登録する。~ | |
| 管理者権限で[[Windows Driver Kit>https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk]]が動作するコマンドプロンプトを立ち上げる。~ | | 管理者権限で[[Windows Driver Kit>https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk]]が動作するコマンドプロンプトを立ち上げる。~ |
| | | |
- | まず,デバイスドライバーのcatファイルの署名の際に使用する証明書を勝手に作成する。~ | + | まず,デバイスドライバー(catファイル)にデジタル署名する際に使用する自己電子証明書を''makecert''コマンドで作成する。~ |
- | > makecert -r -pe -ss my -n "CN=hogehoge CA" -ss "hogehogeStore" xxxxxxxx.cer | + | ''-r''オプションで自己署名証明書の作成を指定している。''-n''オプションでCN=での発行者が発行先にも指定される。''-ss''オプションは登録する証明書ストア名(登録場所:デフォルトはMy)になる。~ |
- | として,証明書を作成する。~ | + | ''-pe''オプションで秘密鍵を自己電子証明書に含めている。~ |
- | CNは発行先名でssはディレクトリ名になるので,これらを適当に指定して自己証明書を作成する。~ | + | これらを適当に指定して自己証明書hogehoge.cer(cerファイルだが,実際にはバイナリフォーマットderになる)を作成する。~ |
| + | > makecert -r -pe -n "CN=hogehoge CA" -ss "hogehogeStore" hogehoge.cer |
| | | |
- | *** 自己証明書をWindowsマシンに登録する [#ea0a4de2] | + | Microsoftのmakecertコマンドだと,デフォルトだと署名アルゴリズムが''sha1''になるので注意する。~ |
- | Windowsマシンへ自己証明書を認証機関で信頼されたように登録する。~ | + | 署名アルゴリズムをsha256にする場合は,''-a sha256''のオプションを追加する((古いバージョンのmakecertコマンドだとsha1しか使えない。))必要がある。~ |
| | | |
- | Windowsマシンに自己証明書を登録して,その登録した証明書を認証機関で証明したように信頼された証明書として設定する。~ | + | うまくいくと,証明書ストアの''-ss''オプションで指定したところに署名用の電子証明書(秘密鍵付)が登録され,デジタル署名時にこの署名用の電子証明書(秘密鍵付)が使用出来るようになる。~ |
- | > 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 | + | |
| | | |
- | これで,作成した自己証明書が使用できるようになる。 | + | また,コマンド実行したディレクトリに自己署名証明書(公開鍵付)hogehoge.cerが作成される。この証明書はデジタル署名を検証する時に使用できる。~ |
| | | |
- | ** デバイスドライバーのinfファイルからcatファイルを作成する [#v9e84533] | + | *** 自己署名証明書をWindowsマシンに登録する [#ea0a4de2] |
| + | 作成された自己署名証明書hogehoge.cerを,第3者認証機関で発行した信頼のある証明書を登録するのと同じように,証明書ストアの''信頼されたルート証明機関''と''信頼された発行元''に登録する。~ |
| + | これは,デバイスドライバーがインストールされる時に''デジタル署名の検証がうまく行えるようにする''ため。~ |
| + | |
| + | 登録する時にWindows標準の''certutil''コマンドが使用できるが,[[Windows Driver Kit>https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk]]等がインストールされていれば''certmgr''コマンドも使用できる。~ |
| + | // > certmgr -add xxxxxxxx.cer -s -r localMachine root |
| + | // > certmgr -add xxxxxxxxe.cer -s -r localMachine trustedpublisher |
| + | // または |
| + | > certutil -addstore ROOT hogehoge.cer |
| + | > certutil -addstore TrustedPublisher hogehoge.cer |
| + | |
| + | これで,作成した自己署名証明書がWindowsマシンに信頼された証明書として登録されて,デジタル署名の検証に使用できるようになる。 |
| + | |
| + | ** デバイスドライバーに自己電子証明書でデジタル署名する [#s035cdaf] |
| + | 署名がないデバイスドライバーに,自己電子証明書を使ってデジタル署名する。~ |
| + | |
| + | ここでは,''catファイルとinfファイルを使ったデバイスドライバー''を想定している。~ |
| + | |
| + | *** デバイスドライバーのinfファイルからcatファイルを作成する [#v9e84533] |
| まず,デバイスドライバーのinfファイルにcatファイル情報を追加する。~ | | まず,デバイスドライバーのinfファイルにcatファイル情報を追加する。~ |
| infファイルを編集し,[Version]のところの最後のラインに, | | infファイルを編集し,[Version]のところの最後のラインに, |
- | CatalogFile=xxxxxxxx.cat | + | CatalogFile=hogehoge.cat |
| と,catファイルの定義を追加する。~ | | と,catファイルの定義を追加する。~ |
| | | |
| 次にデバイスドライバーのinfファイルから,未署名のcatファイルを作成する。~ | | 次にデバイスドライバーのinfファイルから,未署名のcatファイルを作成する。~ |
- | このとき,/os:オプションで対象のテストするOSを指定する。カンマ区切りで複数の指定が出来る。inf2catをオプション無しで実行すると,使用できるOSリストが表示される。~ | + | このとき,/os:オプションで対象となるOSを指定する。カンマ区切りで複数の指定が出来る。inf2catをオプション無しで実行すると,使用できるOSリストが表示される。~ |
| > inf2cat /driver:infファイルが有るディレクトリ /os:10_X64,10_19H1_X64,... | | > inf2cat /driver:infファイルが有るディレクトリ /os:10_X64,10_19H1_X64,... |
| | | |
- | これで,xxxxxxxx.catファイルが作成される。~ | + | これで,未署名のhogehoge.catファイルが作成される。~ |
| | | |
- | ** デバイスドライバーのcatファイルに自己署名を追加する [#u4099817] | + | *** デバイスドライバーのcatファイルにデジタル署名を追加する [#u4099817] |
- | 上記で作成した自己証明書を使用して,デバイスドライバーのcatファイルにデジタル署名を追加する。~ | + | 上記で作成して証明書ストアに登録されている自己電子証明書(秘密鍵付)を利用して,''sightool''コマンドを使ってデバイスドライバーのcatファイルにデジタル署名を追加する。~ |
- | このとき,自己証明書を作成した時の発行先名とディレクトリ名を,-nと-sで指定する。~ | + | このとき,''-n''オプションで自己電子証明書を作成した時の発行先・発行者名を,''-s''オプションで証明書ストア名(登録場所)を指定する。~ |
- | > signtool sign -v -n "hogehoge CA" -s hogehogeStore xxxxxxxx.cat | + | |
| | | |
- | これで,デバイスドライバーのcatファイルに自己証明書でデジタル署名が出来た。 | + | 新しいバージョンのsigntoolコマンドだと,''-fd''オプションで署名アルゴリズムに''sha1''か''sha256''を指定する(makecertで作成した署名用電子証明書のアルゴリズム)必要がある。~ |
| + | また,デバイスドライバーが複数のinfファイルが有る場合,catファイルにデジタル署名する場合はそのうちの一つを指定する必要がある。''-a''オプションを使うと複数の自己電子証明書(秘密鍵付)がある場合,自動的に最適な証明書を選択するようだ。その他多くのオプションが有る。~ |
| + | > signtool sign -v -n "hogehoge CA" -s hogehogeStore hogehoge.cat |
| + | もしくは |
| + | > signtool sign -fd sha1 -a -v -n "hogehoge CA" -s hogehogeStore hogehoge.cat |
| + | |
| + | これで,デバイスドライバーのcatファイルに自己電子証明書を使ってデジタル署名が出来た。 |
| | | |
| * デバイスドライバーをインストールする [#f4e445ed] | | * デバイスドライバーをインストールする [#f4e445ed] |
- | デバイスドライバーに自己署名が出来たら,デバイスをPCに接続してデバイスマネージャーを開く。~ | + | デバイスドライバーにデジタル署名が出来たら,デバイスをPCに接続してデバイスマネージャーを開く。~ |
- | プラグ&プレイ(自動)でデバイスドライバーがインストール出来なかったデバイスに?が表示されているので,上記で作成したデバイスドライバーのディレクトリをしてインストールする。 | + | プラグ&プレイ(自動)でデバイスドライバーがインストール出来なかったデバイスに?が表示されているので,上記で作成したデバイスドライバーのディレクトリを指定すると,デバイスドライバーが無事インストールできた :) ~ |
| + | |
| + | 別の人のWindowsへこのデジタル署名したデバイスドライバーをインストールするためには,作成した自己署名証明書をその人の''証明書ストアの信頼されたルート証明機関と信頼された発行元に登録する''必要がある。 |