8

階層内に祖先またはルート証明書のみを持つ署名を検証することは可能ですか?

免責事項: 私は証明書処理の初心者なので、素朴な用語を許してください。

次の状況を考えてみましょう。

  • 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>
4

3 に答える 3

6

SAML 応答に署名証明書が含まれているか、<ds:X509Data>...</ds:X509Data>その公開鍵のみが含まれているかによって異なります<ds:KeyValue>...</ds:KeyValue>

<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" ...>
  ...
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>...</ds:SignedInfo
    <ds:SignatureValue>...</ds:SignatureValue>
    <ds:KeyInfo>
      <ds:X509Data>
        <ds:X509Certificate>...</ds:X509Certificate>
      </ds:X509Data>
    </ds:KeyInfo>
  </ds:Signature>
</saml2p:Response>

対。

<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" ...>
  ...
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>...</ds:SignedInfo
    <ds:SignatureValue>...</ds:SignatureValue>
    <ds:KeyInfo>
      <ds:KeyValue>
        <ds:RSAKeyValue>
          <ds:Modulus>...</ds:Modulus>
          <ds:Exponent>...</ds:Exponent>
        </ds:RSAKeyValue>
      </ds:KeyValue>
    </ds:KeyInfo>
  </ds:Signature>
</saml2p:Response>

署名証明書が埋め込まれている場合、AuthorityInfoAccess 拡張機能が含まれる場合があります。これには通常、発行 CA 証明書への http または ldap URL が含まれます。署名証明書から信頼できる CA 証明書へのこれらの拡張機能を使用すると、信頼できる証明書チェーンを構築できます。(注: CertCA が実際に CertIdP および CertSP の直接の発行者である場合は、必要な信頼できる証明書チェーンが既に存在します。)

ただし、公開鍵しか取得していない場合は、署名証明書を手元に用意して、公開鍵と照合する必要があります。したがって、プロビジョニング/配布の問題に行き着きます。要求された公開鍵に対応する署名証明書を返す Web サービスを提供できます。署名証明書が SP のローカル キーストアに見つからない場合、Web サービスに接続して新しい CertIdP を取得し、それをローカル キーストアに追加します。ローカル キーストアを保持することは、パフォーマンス、可用性、およびプライバシーに関連します。

于 2014-07-23T10:16:53.700 に答える
3

簡単な紹介から始めましょう - デジタル署名の検証は 2 段階で行われます

  • 最初の署名検証 - 署名値が実際に保護対象のコンテンツに対応していること、およびコンテンツが改ざんされていないことを確認します
  • 信頼検証 - 署名が検証者によって信頼された人物によって作成されたことを確認します)。

デジタル署名の検証には、署名の作成に使用された対応する秘密鍵に対応する公開鍵を所有する必要があります。これを回避する方法はありません。

ただし、CA 証明書の使用を許可する信頼の検証のユースケースが 1 つあります。それはあなたのケースに役立つはずです。

これは、SP および IDP 用に生成されたメタデータに CA (および場合によっては中間 CA) 署名証明書のみを含めるように機能します。次に、SAML メッセージの一部として署名を作成するために使用される正確なリーフ キー (CA によって発行されたもの) を含めます (署名内の KeyInfo 要素内)。次に、SP/IDP は、既に持っている CA 証明書を使用して認証パスを構築および検証することにより、リーフ キー (以前は知られていない) が信頼されていることを検証できます。

SP と IDP は相手に通知する必要なく署名キーを変更できるため、キーのロールオーバー (期限切れなど) に役立ちます。SAML 製品では、この機能をアンカー モードまたは PKIX トラスト モードと呼ぶことがあります。

暗号化には、相手側の正確なリーフ キーを事前に知っておく必要があるため、このアプローチはデジタル暗号化では機能しないことに注意してください。

于 2014-07-23T17:49:00.023 に答える
2

短い答えは「いいえ」です。CA の証明書しかなく、IdP または SP の証明書がない場合、IdP または SP の署名を検証することはできません。

より長い答え: SP による IdP の署名を検証するには、SP は最初に IdP に関連付けられた正しい公開鍵を識別する必要があります。検証には、公開鍵で暗号化された署名値をコンテンツのハッシュと比較し、それらが同じであることを確認することが含まれます。IdP の公開鍵がなければ、SP はこの操作を実行できません。

SP が上記の検証を機能させる公開鍵を持っており、この公開鍵が実際に IdP に属していることを検証したいとします。これを行うには、公開鍵と IdP の名前を含む証明書と、信頼できるエンティティ (この場合は CA) からの署名が必要です。これがないため、署名が IdP によって実行されたことを検証できません。

于 2014-07-25T21:07:15.357 に答える