2011-01-04 11 views
8

私は自動更新機能を実装しており、ベストプラクティスを使用してこれを安全に行う方法についてアドバイスが必要です。ダウンロードしたファイルのAuthenticode署名を使用して、実行することが安全であることを確認します(つまり、当社から発信され、改ざんされていないことを確認します)。私の質問は、質問#2008519と非常によく似ています。自動アップデータの弊社からのAuthenticode署名を確認してください

自動アップデート機能のAuthenticodeシグネチャを確認する最も安全な方法は何ですか?証明書のどのフィールドをチェックする必要がありますか?要件は次のとおりです:(1)チェック署名が有効であること、(2)署名がチェックされていること、(3)証明書の有効期限が切れたときに古いクライアントが更新され、

は、ここに私の研究から、いくつかの背景情報/アイデアだ:私は、これは2つのステップに分けることができ信じている:

  1. は、署名が有効であることを確認してください。私はこれがWinVerifyTrustを使用して容易になるはずだと信じていますhttp://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx - 私はここで問題を期待していません。

  2. 署名が当社以外の会社ではないことを確認してください。これは答えがより難しいと思われる:

1つの可能性は、署名の文字列のいくつかをチェックすることです。 MS KBの記事#323809のコードで入手できますが、この記事ではこのタイプのアプリケーション(またはその他の分野)についてどのフィールドをチェックするべきかについては推奨していません。 Question #1072540は、証明書情報を取得する方法も示していますが、実際に確認するフィールドはお勧めしません。私の懸念は、文字列が最良のチェックではないかもしれないということです。たとえば、別の人が同じ名前の証明書を取得できる場合はどうなりますか?または、将来、文字列を変更する正当な理由がある場合は、

question #2008519の人物には非常によく似た要件があります。 「TrustedByUs」機能の必要性は、私のものと同じです。しかし、彼は公開鍵を比較することでチェックを行っています。これは短期間では機能しますが、自動更新機能では機能しないようです。コード署名証明書は2〜3年間有効です。したがって、今後2年間で新しい証明書を購入すると、古いクライアントは公開鍵の変更によりこれ以上更新できなくなります。

+0

フォローアップ:私はブライアンの提案を多かれ少なかれ取り上げました。 (1)WinTrustVerifyでAuthenticode署名を検証する、(2)Authenticode署名を検査すること、その文字列が私の会社名と一致することを確認します。(3)追加の措置として、私はDSAと別の署名を行います。署名は実行可能ファイルと一緒に送信され、チェックされます。 –

+0

Microsoftの[Windows Authenticode Portable Executable Signature Format](http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx)も参照してください。 – jww

答えて

3

質問番号2008519の人物は、 と非常によく似ています。 の "TrustedByUs"機能の必要性は、 と同じです。しかし、彼は公開鍵を比較することによって のチェックを行っています。 これは 短期では機能しますが、自動更新機能のためには が機能しないようです。 のコードに署名するコードは、2 - 3の間だけ有効です。 年です。したがって、将来、 2の新しい証明書を購入すると、 年になると、 の公開鍵の変更により、古いクライアントはもう に更新されなくなります。

懸念があるので、そのアプリケーションが信頼あなたではなく、人はあなたを信頼していることを、あなただけの自己署名を使用して、アプリケーション自体に必要な公開鍵を埋め込むことができます。これにより、プロセスをより詳細に制御できます。これは、あなたのコントロール下にないユーザーまたはアプリケーションに信頼を与えるように頼むときには不適切ですが、この場合アプリケーションはあなたの管理下にありますので、うまくいきます。これにより、他の人の似たような証明書を自分のものと間違えることを非常に簡単に避けることができます。

+0

自動アップデータは、Webサイトから最初にソフトウェアをダウンロードするときにユーザーが使用するのと同じセットアッププログラムを使用します。自己署名ソリューションは、既知の自己署名公開鍵を使用してアプリケーションがインストールされている場合に機能します。ダウンロードしたプログラムをWindows/Webブラウザで実行するかどうかを尋ねられる初期ダウンロードはどうですか?このためには、信頼されたルートCAによって署名されている必要があります。おそらく(それは可能ですか?)EXEが自己署名とルートCAから購入された証明書の両方によって署名されるためには...? –

+1

@James:あなたは、別のファイルに簡単に署名することができます。サーバーと自動アップデータの間の通信を完全に制御できます。 – Brian

関連する問題