Spring security 无法对传出邮件进行签名,因为在EmptyKeyManager上下文中未设置签名凭据

Spring security 无法对传出邮件进行签名,因为在EmptyKeyManager上下文中未设置签名凭据,spring-security,x509certificate,spring-saml,Spring Security,X509certificate,Spring Saml,我已使用初始密钥管理器bean在我的应用程序中设置saml上下文: <!-- Central storage of cryptographic keys --> <bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager"> <constructor-arg value="classpath:security/samlKeystore.jks"/>

我已使用初始密钥管理器bean在我的应用程序中设置saml上下文:

<!-- Central storage of cryptographic keys -->
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
    <constructor-arg value="classpath:security/samlKeystore.jks"/>
    <constructor-arg type="java.lang.String" value="nalle123"/>
    <constructor-arg>
        <map>
            <entry key="apollo" value="nalle123"/>
        </map>
    </constructor-arg>
    <constructor-arg type="java.lang.String" value="apollo"/>
</bean>

这个配置对我的IDP很有效。也就是说,在验证传入的SAML消息后,它成功地对用户进行身份验证

此外,我还试图简单地用EmptyKeyManager实现替换此管理器,但上面出现了错误

在将这些更改部署到生产环境之前,最好了解几个问题:)

  • 考虑到我的IDP对从samlKeystore.jks导入的默认公钥一无所知,它是如何工作的
  • 如果我的配置不需要EmptyKeyManager,如何正确地将keyManager的初始实现替换为EmptyKeyManager
您可以在手册()中找到,只有在应用程序不需要创建数字签名的情况下,才可以使用
EmptyKeyManager
。您提到的错误表明SpringSAML确实需要在您的使用模式中创建一个。也许您正在使用HTTP工件绑定,并且需要对传出的工件请求消息进行签名


手册还显示了将当前的
keyManager
替换为
EmptyKeyManager

谢谢@Vladimir的具体配置。可能我遇到的主要问题是我对这个jks密钥管理器的使用产生了误解。考虑到我们使用SP发起的SSO,我们需要先对SAML令牌进行数字签名,然后再将其发送给IDP。目前很明显,来自jks的证书用于消息级安全,而不是用于传输层。