规范规定:
OASIS安全断言标记语言(SAML) V2.0的元数据
2.4.1.1元素
<KeyDescriptor>
<KeyDescriptor>
元素提供了关于所使用的加密密钥的信息实体用于签署数据或接收加密密钥,以及附加的加密的细节。其KeyDescriptorType
复型包括以下元素和属性:
use
[可选]指定被描述键的目的的可选属性。值从KeyTypes枚举中抽取,并由值
encryption
和signing
组成。
<ds:KeyInfo>
[Required]直接或间接标识键的可选元素。
据我所知,为了在两个方向上发送安全数据,我应该:
- 我自己的私钥
- 我自己的公钥
- 接收方公钥
我应该在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>
...
我说的对吗?
您自己的服务的元数据应该包含您的公钥和证书。是的,您可以同时使用签名和加密。
当IDP要加密发送给SP的数据时,使用SP的公钥进行加密,因此不需要包含"IDP的公开密钥证书"作为加密密钥。
你提到使用相同的密钥签名和加密不起作用,你能得到更多的细节,到底是什么失败了,在哪里?