階層内に祖先またはルート証明書のみを持つ署名を検証することは可能ですか?
免責事項: 私は証明書処理の初心者なので、素朴な用語を許してください。
次の状況を考えてみましょう。
- 2 つの当事者 ( ID プロバイダーの場合はIdP 、サービス プロバイダーの場合はSPと呼びましょう) と、IdP と SP の両方によって確実に信頼されているいくつかの中央認証局CAがあります。
- CA には、IdP と SP の両方に知られている独自の証明書CertCAがあります (何らかのエイリアスで IdP と SP のキーストアにインポートされます) 。
- Out CA は、IdP 用 ( CertIdP ) と SP 用( CertSP ) の証明書を 1 つずつ発行します。
- IdP はキーストアに CertIdP を持ち、そのパスワードを知っているため、IdP は CertIdP でメッセージに署名できます
- SP/CertSP も同様
- ここで、SP が CertIdP を認識しておらず、IdP が CertSP を認識していないと仮定します。彼らは、CertIdP と CertSP の署名に使用された CertCA しか知りません。(私が理解しているように、証明書階層 CertIdP --> CertCA <-- CertSP here-) があります。
- IdP は、署名付きメッセージを SP に送信したいと考えています。メッセージを作成し、CertIdP を使用して署名します。
- SP は、CertIdP を使用して IdP によって署名されたメッセージを受信します。上記のように、SP には CertIdP がなく、親証明書 CertCA のみがあります。
私の質問は次のとおりです: SPは、親証明書CertCAのみを持つCertIdPによって署名されたメッセージの署名を検証できますか?
バックストーリー、なぜそれが欲しいのですか。
PicketLink を使用して SAML ベースの SSO を実装しています。PicketLink のSAML2SignatureValidationHandlerを使用して署名を検証しています。これを実現するには、サービス プロバイダー (SP) のキーストアに IdP の証明書が必要です。署名された SAML アサーションが SP に渡されると、このハンドラーは IdP の証明書を使用して署名を検証します。
上記のプロセスはうまく機能しますが、組織的な問題がいくつかあります。このプロセスは、SP が検証用の IdP の証明書を持っていることを前提としています。何か変更があった場合、SP 側で IdP の証明書を置き換える必要があります。多数の SP (数千ではなくても数百) が存在する可能性があるため、これはかなりの労力です。
CertIdP と CertSP の両方が、IdP と SP の両方によって確実に信頼されている同じ機関 (CA) によって発行されているため、署名の検証に CA の証明書を使用できるという考えがありました。これが機能する場合、IdP と SP の間で証明書を交換する必要がなくなる可能性があります。CA の証明書も非常に「長寿命」であるため、交換する必要があるのは永遠に 1 回だけです (この場合の永遠は約 10 ~ 20 年です)。
ただし、親 CertCA のみを持つ CertIdP で署名された署名を検証することが技術的に可能かどうかはわかりません。出来ますか?それとも、ここで完全に間違った方向に進んでいますか?
関連する場合は、SP 側で Java/JBoss プラットフォームを使用しています。IdP はサードパーティ ソフトウェアです。
アップデート:
これは、IdP から現在取得している署名です。
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_...">
<ds:Transforms>
<ds:Transform
Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
PrefixList="ds saml samlp" />
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>r...=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>X...==</ds:SignatureValue>
</ds:Signature>