ドライバー インストール時のセキュリティ ダイアログにまつわるお話

(更新 2016/09/12) - Windows 7 で見られるダイアログ表示に関連した問題について追記しました。本文をお読みの上 ご確認ください。

こんにちは。JS です。

今回は、ドライバーのインストール時における証明書の認証について、お話をします。

 

~~~

 

多くのユーザーは、ドライバーをインストールする時に、以下の様なダイアログを見たことがあるかと思います。

 

clip_image001

 

ただ、どのドライバーも必ず上記のようなダイアログが表示されるというわけではなく、表示されないままインストールの処理が行われるものもあります。その理由は、署名にあります。

 

署名されているドライバーには、通常、以下 2 種類のうちいずれかの署名が付与されています。

1.    マイクロソフトより付与された、WHQL 署名

2.    ドライバー開発者自身で付与された、Authenticode 署名 (自己署名とも呼びます)

 

このうち、2 の Authenticode 署名がされたドライバーをインストールする場合、インストール時にダイアログが表示されます。

 

最近では、このダイアログについて、どういった理由によって発生しているのかお問い合わせをいただいています。なので、その疑問を解消するために、今回は、このダイアログ周りについて解説したいと思います。

 

なぜダイアログが発生するのか?

ダイアログを見ると、「<開発元名> からのソフトウェアを常に信頼する」と記述されているチェックボックスがあります。また、ダイアログ下部においても、「信頼する発行元からのドライバーソフトウェアのみをインストールしてください。」といった文言があります。

 

上記 2 点の記述は、いいかえますと、インストールしようとしているドライバーの署名に使った証明書は、ユーザーにとってまだ信頼されたものとして判断されていないことを意味しています。

 

ダイアログが表示される理由は、マイクロソフトがセキュリティ上の措置として、信頼されたものとして判断されていない発行元からの証明書については、一度ユーザーの確認を取る為に行っているためです。

このような証明書を利用した場合でも、OS は証明書の発行者を辿り、クロス証明書により、最終的にはマイクロソフトが信頼している証明機関が発行したものと確認できる為、ドライバーのインストールが可能になります。ただ、実際にインストール時の検証で確認される発行先は、認証機関ではなく、ドライバーの開発元となるため、OS は、その開発元を信頼されたものとして、自動的には判断することができません。したがって、ダイアログが表示されます。

なお、チェックボックスを有効にした状態で [インストール] ボタンを押すと、今後 同じ発行元からの証明書を利用して署名したドライバーをインストールする際は、ダイアログは表示されず、自動的にインストールの処理が行われます。

 

では次に、OS がどのように証明書が信頼できると判断するかについて説明します。

 

どうやって信頼された発行元として判断されるのか?

先程ダイアログのチェックボックスを有効にした状態でボタンを押すと、ダイアログが今後 表示されなくなることをお伝えしました。その時に何が起きているのか、実際の動作を見てみましょう。

 

Windows+R キーを押し、「ファイル名を指定して実行」より、"certmgr.msc" を入力し Enter を押します。

 

clip_image002

 

すると、証明書の管理を行う Certmgr と呼ばれるツールの画面が現れます。

 

clip_image003

 

GUI の左側では、証明書の種類を分類する「証明書ストア」がリスト化されており、特定のストアを選択することで、GUI の右側でそのストアに格納されている証明書を確認することができます。

ここでは、 [信頼された発行元] ストアの挙動を見てみます。GUI 左側より [信頼された発行元] > [証明書] を選択することで、GUI 右側に証明書の一覧が見られますが、インストール前とインストール後で比較すると、新しい証明書が登録されているのが確認できます。

つまり、チェックボックスを押すことで、その証明書を証明書ストアにインポートする動作が行われるようになるのです。この [信頼された発行元] ストアに、署名に利用した証明書が登録されているかされていないかが、ダイアログの表示有無の判断材料になります。

 

なお、この証明書のインポート方法については、ダイアログにてチェックボックスを有効にする方法とは別にありますので、以下に紹介したいと思います。

 

証明書のインポートについて

ダイアログを経由せずに、上記の通り証明書をインポートする方法について、以下 2 つの方法を紹介します。

1.     署名されたファイルのプロパティから UI でインポートする方法

2.     Certutil コマンド ライン ツールを利用してインポートする方法

 

それぞれの方法の詳細は以下の通りです。

1.     署名されたファイルのプロパティから UI でインポートする方法

まず、OS 内の UI を通して証明書をインポートする方法があります。ここでは、例として、Window 8.1 に既定で入っているドライバーのカタログファイルを利用しています。以下が手順となります。

a.    ドライバー パッケージのカタログファイルをダブルクリックし、 [署名の表示] ボタンをクリックします。

 

clip_image004

 

b.    署名の詳細画面が現れるので、 [全般] タブの [証明書の表示] ボタンをクリックします。

 

clip_image005

 

c.    証明書の詳細画面が表示されます。 [全般] タブより、 [証明書のインストール] ボタンをクリックすると、ウィザードが開始されます。

 

clip_image006

 

d.    保存場所として [ローカル コンピューター] を選択の上、 [次へ] ボタンをクリックします。なお、ローカル コンピュータにインポートする場合は、管理者権限が必要です。 [次へ] をクリックすると、ユーザーアカウント制御ダイアログがでるので、 [はい] をクリックします。

 

clip_image007

 

clip_image008

 

e.    証明書ストアにインポートする作業が始まります。今回は、信頼された発行元としてインポートを行いたいので、 [証明書をすべて次のストアに配置する] オプションをクリックし、 [参照] ボタンを押します。参照画面が表示されるので、「信頼された発行元」ストアを選択して [OK] をクリックし、ウィザードの [次へ] をクリックします。

 

clip_image009

 

clip_image010

 

f.     確認画面が現れます。内容を確認し、 [完了] ボタンをクリックします。

 

clip_image011

 

g.    完了ダイアログが表示されます。これで完了です。

 

clip_image012

 

h.    実際にインポートされたかを確認しましょう。Certmgr.msc にて、 [信頼された発行元] > [証明書] をクリックすると、証明書が追加されているのが確認できます。

 

clip_image013

 

 

2.     Certutil コマンド ラインを利用した方法

Windows では、Certmgr とは別に、証明書の管理を行う為のコマンドライン ツールとして、Certutil.exe と呼ばれるツールがあります。

1 で紹介した UI を使って証明書をインポートする方法とは他に、この Certutil ツールを利用した方法があります。

なお、Certutil ツールにて利用できる各コマンドについては、以下のサイトを参照ください。

  Certutil

  https://technet.microsoft.com/en-us/library/cc732443.aspx

今回は証明書を新しく登録するため、Certutil の -addstore コマンドを利用します。

-addstore の基本的な構成は以下の通りです。

 

CertUtil -addstore <インポート先の証明書ストア> <証明書ファイルのパス>

上記からも分かりますが、-addstore を利用する場合は、引数として、証明書「ファイル」のパスを求められます。UI などでは証明書の情報を確認することができますが、実際にファイルとして利用したい場合は、一度 ファイルとして取り出す必要があります。

取り出しの手順については、以下の通りです。ただ、前提として、対象の証明書が証明書ストアに登録されている必要があります。まだ登録されていない場合は、先程紹介しました「署名されたファイルのプロパティから UI でインポートする方法」であらかじめ登録しておきましょう。

a.    Certmgr.msc を開き、ファイルとして取り出したい証明書を選択した上でメニューより [操作] > [すべてのタスク] > [エクスポート] をクリックします。

 

clip_image014

 

b.    ウィザードが表示されます。 [次へ] をクリックします。

 

clip_image015

 

c.    今回、Certutil で使う証明書ファイルは .cer ファイルという形式なので、 [DER encoded binary X.509 (.CER)] オプションを選択し、 [次へ] をクリックします。

 

clip_image016

 

d.    次に、エクスポートする名前のファイルを指定します。 [参照] ボタンをクリックし、エクスポート先のフォルダと名前を指定した後、 [次へ] ボタンをクリックします。証明書ファイルの名前自体は特に意味はないので、任意の名前で保存してください。

 

clip_image017

 

e.    完了画面が現れます。内容を確認し、 [完了] をクリックします。

 

clip_image018

 

f.     完了ダイアログが現れて終了です。

 

clip_image019

 

上の通り、私は "C:\Certificate\WindowsCertificate.cer"というファイルとしてエクスポートしました。このパスを Certutil に使用します。今回、インポート先の証明書ストアは、「信頼された発行元」なので、それを意味する "TrustedPublisher"を使用します。

最終的には、以下のコマンドになります。

certutil -addstore "TrustedPublisher" "C:\Certificate\WindowsCertificate.cer"

このコマンドを管理者権限で実行すると、証明書ストアに、信頼された発行元として証明書がインポートされます。

 

clip_image020

なお、Certutil コマンドで指定する場合の、各 証明書ストアの表記については、以下のサイトを参考にしていただけたらと思います。

Certificate Store Migration

https://technet.microsoft.com/en-us/bb204781(v=VS.90)

 

以上が、ドライバーのインストール時に表示されるダイアログに関する説明でした。OS がどの様な仕組みで検証し、今回のようなセキュリティダイアログがなぜ出ているのか気になる人に、このエントリがお役に立てたら幸いです。

2016/09/12 追記:

冒頭でご案内しましたダイアログについて、チェックボックスを有効にした状態で [インストール]ボタンを押すと、今後 同じ発行元からの証明書を利用して署名したドライバーをインストールする際は、ダイアログは表示されず、自動的にインストールの処理が行われることを本エントリでお伝えしました。
ただ、Windows 7 では、ドライバーの署名に SHA-2 の署名アルゴリズムを利用した証明書が使われた場合、チェックボックスを有効にした状態でドライバーのインストールを行っても、その後 同じ発行元からの証明書を利用して署名したドライバーをインストールする際にダイアログが依然として表示されてしまう問題が発生します。つまり、Windows 7 を対象に使われる SHA-2 証明書は、信頼された発行元として扱われている場合でも、ドライバーの署名に使われた場合そのドライバーのインストール時にセキュリティ ダイアログが表示されます。

現在は、この問題に対する修正モジュール (Hotfix) が提供されています。以下のサポート サイトにて、問題の詳細と Hotfix のダウンロード リンクを確認できますので、ご参照ください。なお、この Hotfix は Windows Update では配布されておらず、別途 インストールいただく必要がありますので、予めご了承ください。

  The "Untrusted publisher" dialog box appears when you install a driver in Windows 7 or Windows Server 2008 R2

  https://support.microsoft.com/en-us/kb/2921916