规范说:
Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0
2.4.1.1元素
<KeyDescriptor>
<KeyDescriptor>
元素提供有关加密密钥的信息 实体用于签署数据或接收加密密钥,以及附加 加密细节。它的KeyDescriptorType
复杂类型包括 以下元素和属性:
use
[可选]可选属性,指定所描述的密钥的用途。值来自KeyTypes枚举,由值
encryption
和signing
组成。
<ds:KeyInfo>
[必需]直接或间接标识密钥的可选元素。
据我所知,为了向两个方向发送安全数据,我应该:
我应该在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>
...
我是对的吗?
我将非常感谢这些信息。谢谢大家。
答案 0 :(得分:6)
您自己服务的元数据应包含带有证书的公钥。是的,您可以使用相同的签名和加密。
当IDP想要加密要发送到SP的数据时,它使用SP的公钥来实现。因此,不需要包含“IdP的开放密钥证书”作为加密密钥。
您提到使用相同的密钥进行签名和加密都不起作用,您是否能够获得有关确切失败的原因和位置的更多详细信息?