6

规范说:

OASIS 安全断言标记语言 (SAML) V2.0 的元数据

2.4.1.1 元素<KeyDescriptor>

<KeyDescriptor>元素提供有关实体用于签署数据或接收加密密钥的加密密钥的信息,以及其他加密详细信息。其 KeyDescriptorType复杂类型由以下元素和属性组成:

use[可选的]

可选属性,指定所描述的键的用途。值来自 KeyTypes 枚举,由值encryption和组成signing

<ds:KeyInfo>[必需的]

直接或间接标识键的可选元素。

据我所知,为了双向发送安全数据,我应该:

  1. 我自己的私钥
  2. 我自己的公钥
  3. 收件人的公钥

我应该在 SP 元数据中指定什么密钥的证书,我可以使用相同的证书进行签名和加密吗?

IdP 的供应商提供了所谓的“元数据模板”,其中指明了应该拼写的内容和位置。

这是相关部分(逐字):

...
<md:KeyDescriptor use="signing"> 
   <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
         <ds:X509Certificate> 
            <!--
             TODO It is necessary to insert here the certificate of the signature 
             key of the service provider in X509 DER format and Base64 encoded
             --> 
          </ds:X509Certificate> 
      </ds:X509Data> 
   </ds:KeyInfo> 
</md:KeyDescriptor> 

<md:KeyDescriptor use="encryption"> 
   <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
         <ds:X509Certificate> 
            <!--
             TODO It is necessary to insert here the certificate of the signature 
             key of the service provider in X509 DER format and Base64 encoded
             --> 
         </ds:X509Certificate> 
      </ds:X509Data> 
   </ds:KeyInfo> 
</md:KeyDescriptor> 
...

我这样做:

...   
<md:KeyDescriptor use="signing">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
                MIID...ZiQ==
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
                MIID...ZiQ==
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</md:KeyDescriptor>
...

这没用。

因此,AFAIK 用于签名我应该使用我的私钥证书,而对于加密我应该使用 IdP 的开放密钥证书。

恕我直言,应该是这样。

...
<md:KeyDescriptor use="signing">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
                <!-- certificate of my private key here-->
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
                <!-- certificate of the open key of IdP here -->
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</md:KeyDescriptor>
...

我对吗?

4

1 回答 1

6

您自己服务的元数据应包含您的公钥和证书。是的,您可以将同一个用于签名和加密。

当 IDP 想要加密发送给 SP 的数据时,它使用 SP 的公钥来进行。因此,无需将“IdP 的开放密钥证书”作为加密密钥。

您提到使用相同的密钥进行签名和加密是行不通的,您是否能够获得更多关于究竟是什么失败以及在哪里失败的详细信息?

于 2014-07-15T09:36:36.527 回答