1

自己署名証明書を使用したデジタル署名の検証に関して質問があります。

次のチュートリアルが役に立ちます: http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html

しかし、X.509 証明書が自己署名されている場合、受信者は XML メッセージに添付された証明書データをどのように信頼できるのでしょうか? 誰でも自己署名証明書を生成し、同じ送信者であると主張できます。上記のチュートリアルの検証では、常に true が返されます。送信者の証明書は受信者のトラストストアにロードする必要があるため、受信者はトラストストア内のものを使用して署名済みドキュメントを検証できます。そのようなシナリオの参照が見つかりません。

4

2 に答える 2

3

あなたの理解は正しいです-自己署名証明書を使用すると、誰でも証明書を作成でき、署名の検証は問題ありません。その理由は、署名の検証が最初に暗号化操作を実行し、正常に完了するためです。2 番目のステップは、証明書自体とその出所を検証することです。CA 署名付き証明書が使用される場合、証明書は信頼できる CA (または既知のルート CA) までの CA 証明書を使用して検証されます。自己署名証明書による検証はできません。上記のチュートリアルでは、証明書の検証の手順は非常に複雑でチュートリアルの範囲を超えているため、簡単にするために省略されています。

于 2011-06-25T20:19:19.397 に答える
1

あなたが説明している問題は、通常、Public Key Infrastructures (PKI)によって解決されます。

これは、たとえば HTTPS サイトの証明書を検証するための従来のモデルです。これは、CA 証明書を「信頼できる」としてインポートする一連の信頼できる証明機関 (CA) から始まります。次に、取得したエンティティ証明書は、検証する証明書と既知の CA 証明書との間に証明書パスを構築することにより、この一連のトラステッド アンカーに対して検証されます (おそらく中間 CA 証明書を介して、証明書を信頼できる発行者にリンクします)。

これを行うためのさまざまなルールは、RFC 5280で説明されています。PKI システムは Web サーバーだけに適用されるのではなく、すべてのエンティティに適用されます (有効な証明書を持っていることに加えて、Web サーバーが通信したい相手であることを確認するための追加の規則があります)。

(特に、どの CA 証明書を信頼するかの選択は、多くの場合、ユーザーに代わって、少なくとも既定では OS またはブラウザー ベンダーによって行われるため、このモデルは完全ではありませんが、最も一般的に使用されています。)

または、事前に信頼できる自己署名証明書のリストを作成しても問題ありません。

いずれにせよ、帯域外のメカニズムによって信頼するものを事前に設定する必要があります (たとえば、信頼できる人に会って、その人が直接あなたに与える証明書を使用するなど)。

この PKI モデルは、発行者 DNサブジェクト DNの概念のおかげで、X.509 形式と密接に関連しています。たとえば、信頼の網を構築する PGP 証明書に依存するなど、他のモデルを使用することもできます。トラステッド アンカーの初期セットが必要です。

Java の XML-DSig のX509KeySelector場合、信頼できるキーのみを返す を実装する必要があります。信頼する自己署名証明書の定義済みセットがある単純なシナリオでは、それらの信頼できる証明書を含むキーストアを反復処理できます。それ以外の場合は、Java PKI Programmer Guideを使用してください (使用したチュートリアルからリンクされています)。

于 2011-06-25T20:17:25.107 に答える