【问题标题】:Configure Spring Security SAML to use SHA-256 as secure hash algorithm配置 Spring Security SAML 以使用 SHA-256 作为安全哈希算法
【发布时间】:2015-10-19 06:57:14
【问题描述】:

我正在研究 Spring SAML 和 Microsoft ADFS 3.0 之间的集成。即使它已经在the documentation of Spring SAML 中声明为:

双击打开提供程序,选择高级选项卡并更改 “安全哈希算法”转 SHA-1

我了解 Spring SAML 目前仅支持 SHA-1 作为哈希算法,但我的要求是使用 SHA-256。如果我尝试仅在 ADFS 中为 SHA-256 配置,它不起作用。我想我必须对 Spring SAML 做一些事情。你知道怎么做吗?

【问题讨论】:

标签: spring-security spring-saml


【解决方案1】:

您应该将 Spring 安全配置配置为使用SHA-256 签名算法。

您可以覆盖SAMLBootstrap 或像这样配置initializing bean

弹簧配置

<bean id="samlProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:saml.properties" />
</bean>
<bean class="your.package.SAMLConfigurationBean">
    <property name="signatureAlgorithm" value="${saml.signatureAlgorithm:SHA1}" />
</bean>

属性文件(saml.properties)

saml.signatureAlgorithm=SHA256

初始化 bean

package your.package;

import org.opensaml.Configuration;
import org.opensaml.xml.security.BasicSecurityConfiguration;
import org.opensaml.xml.signature.SignatureConstants;
import org.springframework.beans.factory.InitializingBean;

public class SAMLConfigurationBean implements InitializingBean {

    private String signatureAlgorithm ;
    private String digestAlgorithm;

    public void setSignatureAlgorithm(String algorithm) {
        switch (algorithm) {
            case "SHA256" :
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA256;
                break;
            case "SHA512" :
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA512;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA512;
                break;
            default:
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA1;
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration();
        config.registerSignatureAlgorithmURI("RSA", signatureAlgorithm);
        config.setSignatureReferenceDigestMethod(digestAlgorithm);
    }
}

你也可以跳过可配置的部分,直接解决这个问题:

初始化 bean

package your.package;

import org.opensaml.Configuration;
import org.opensaml.xml.security.BasicSecurityConfiguration;
import org.opensaml.xml.signature.SignatureConstants;
import org.springframework.beans.factory.InitializingBean;

public class SAMLConfigurationBean implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration();
        config.registerSignatureAlgorithmURI("RSA", SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
        config.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
    }
}

【讨论】:

    【解决方案2】:

    我推荐参考这个 GitHub 示例项目:https://github.com/choonchernlim/spring-security-adfs-saml2

    提供 ADFS 专用配置信息,并详细说明如何启用 SHA-256 签名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-19
      • 2023-04-03
      • 2023-03-18
      • 1970-01-01
      • 2013-01-09
      • 2019-07-21
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多