デジタル署名ソフトウェア - 自己署名証明書

デジタル署名ソフトウェア - 自己署名証明書

ソフトウェア実行可能ファイルの署名を試してみたいのですが、何か分からないことがあるのではないかと心配です。

CA から証明書を取得する段階になりますが、その前に何をしているのか知りたいので、テストを行いました。

自己署名証明書を作成しました:

makecert -r -ss myPrivateCert -sk c:\test -n "CN=My Company Inc." testCert.cer

次に実行ファイルに署名します。

signtool sign /v /s myPrivateCert /n "My Company Inc." /t http://timestamp.verisign.com/scripts/timstamp.dll c:\folder\my_installer.exe

どちらのコマンドも成功しました。

ステップ 3:「テスト証明書をインストールする」http://msdn.microsoft.com/en-us/library/bb756995

成功。

(注: フォルダーにはc:\test、Microsoft が推奨するクロス証明書リストからダウンロードした証明書を配置しました。VeriSign Class 3 Public Primary Certification Authority - G5.cerそうするべきだったと推測しています。)

走るcertmgr c:\folder\my_installer.exe

そして、私が追加した 3 つの証明書のリストが、件名、発行者、シリアル番号などとともに表示されました (My Company Inc. および Verisign から)。どうやらすべて問題ないようです。

その後も、インストーラー (または実行可能ファイル) をダブルクリックすると、不明な発行元に関する UAC メッセージが表示されます...

では、そのボックスを非表示にするか、プロデューサーとして「My Company Inc.」と表示するには、他に何をする必要がありますか? これはローカル マシンのみで、すべて手動で行います...

実際のテストでは、クライアントが VirtualBox 環境であると想定しています...それで?次のステップは、インストーラーを VirtualBox に移動して実行することです。

しかし、キーや証明書などについてクライアントに伝えるにはどうしたらいいのでしょうか? exe と一緒に cer ファイルをコピーするのでしょうか? それを特別な場所に置く必要があるのでしょうか? 他のファイルをコピーするのでしょうか? mmc を再度実行する必要があるのでしょうか? ユーザーはそのようなことをしなければならないのでしょうか? ユーザーの観点からすると、非常に複雑に思えるので... これは非常に混乱を招きます...

たとえば、Verisign から実際の証明書を購入した場合、Web 経由で認証され、他に何もする必要がない (上記の 2 つのコマンド (-r を除く)) と想定していますか?

これについてはウェブ上で多くの指示を見つけましたが、どれも私が始めたときと同じくらい混乱したままでした。おそらく、それぞれが何らかの事前知識を前提としていたのでしょう...

答え1

これは「Web 経由で認証」するものではありません (証明書失効リスト (CRL) をチェックする以外)。ルート CA はオペレーティング システムに組み込まれており、Windows Update または OS インストール ディスクによってインストールされます。言い換えると、ルート CA はハード ドライブ上の静的データのセットであり、簡単には変更できません。

迷惑なボックスを消すには、次のいずれかの方法を使用します。

  • 怪しげな署名の CA を信頼する (一般的には悪い考えですが、うまくいきます)。または
  • 公的に信頼されている公式ルート CA またはその中間 CA のいずれかによって署名を取得します。

Verisign を挙げておられますね。いいですね。Verisign は、コード署名証明書を発行できる可能性のあるプロバイダーの 1 つです。ボックスがまだ表示されるのは、私の知る限り、Windows がすべての自己署名証明書に対して警告を自動的にポップアップするようにプログラムされているためです。自分で作成したルート CA に基づいて CSR を生成しようとすると、ルート CA を信頼することでボックスを非表示にすることができ、それはうまくいきます。しかし、そうすると、クライアントにルート CA を信頼してもらう必要があり、ほとんどの場合、それでは目的が達成されません。したがって、パブリック トラスト ネットワークが最も簡単な方法です。ベンダーは通常、サービスの使用方法やコードの署名方法についても明確な指示を提供します。

関連情報