あなたが説明している問題は、通常、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を使用してください (使用したチュートリアルからリンクされています)。