Spring 安全 SAML - 签名和解密

Spring Security SAML - Signature and Decryption

我正在尝试使用 Spring 安全 SAML 作为我的一个项目的 SP。 SAML2.0 断言来自第 3 方系统并已获得数字签名且断言已加密。

我试图用两个 certificates/keys(一个用于签名,一个用于加密)创建一个 Java 密钥库,但它不起作用。如果我只有一个 jks 用于签名或解密,其中一个就可以工作。在任何地方都找不到任何使用两个 certificates/keys 进行签名和解密的示例。下面是 JKSKeymanager 配置。任何帮助将不胜感激。

这行不通

<beans:bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
        <beans:constructor-arg value="file:${config.location}/defaultSAMLKeyStore.jks"/>
        <beans:constructor-arg type="java.lang.String" value="Welcome1"/>
        <beans:constructor-arg>
            <beans:map>
                <beans:entry key="samlAssertionEncryption" value="Welcome1"/>
                <beans:entry key="samlSignature" value="Welcome1"/>
            </beans:map>
        </beans:constructor-arg>
        <beans:constructor-arg type="java.lang.String" value="samlSignature"/>
</beans:bean>

当我们交换密钥时签名/(或)解密有效

<beans:bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
        <beans:constructor-arg value="file:${config.location}/defaultSAMLKeyStore.jks"/>
        <beans:constructor-arg type="java.lang.String" value="Welcome1"/>
        <beans:constructor-arg>
            <beans:map>
                <beans:entry key="samlSignature" value="Welcome1"/>
            </beans:map>
        </beans:constructor-arg>
        <beans:constructor-arg type="java.lang.String" value="samlSignature"/>
</beans:bean>

经过一段时间后,我发现这不是问题。签名验证不需要 JKS 密钥库,因为它是使用 SAML Response/Metadata 中的 certificate-data/method 进行验证的。我们目前唯一需要的密钥库是用于断言的解密,它工作正常。