当前位置: 首页 > 知识库问答 >
问题:

将Spring Security SAML配置为使用SHA-256作为安全哈希算法

陶星渊
2023-03-14

我正在研究Spring SAML和Microsoft ADFS 3.0之间的集成。甚至它已经在Spring SAML的留档中声明为:

双击提供程序打开它,选择tab Advanced并将“安全哈希算法”更改为SHA-1

我知道Spring SAML目前只支持SHA-1作为哈希算法,但我的要求是使用SHA-256。如果我尝试仅在ADFS中为SHA-256配置,它将不起作用。我想我得对Spring SAML做点什么。你知道怎么做吗?

共有2个答案

匡晟
2023-03-14

我建议参考以下GitHub示例项目:https://github.com/choonchernlim/spring-security-adfs-saml2

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

后易安
2023-03-14

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

您可以重写SAMLBootstrap或配置初始化bean,如下所示:

Spring配置:

<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);
    }
}
 类似资料:
  • 我正在尝试使用亚马逊的弹性代码转换器。这里我需要sha-256散列一个字符串;http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html 我已经尝试了我在网上找到的任何方法,但我找不到与页面和一些在线哈希网站提供的相同的结果。 下面是要散列的字符串,您可以从上面的链接中找到; 以下是预期结果: 3

  • 因此,我试图找出如何在ios上进行hmacshad256哈希,因为这是我为wcf服务api所做的哈希。我一直试图寻找一些关于它的信息,但通常只是最终得到一个SHA-256哈希。

  • 行是我构造字符串并将其转换为byte[]以转换为SHA-256散列的地方,其中tmpSessionId是我从HTTP请求中获取的值。产生的散列将在以后的请求中发送。

  • 问题内容: 我一直在使用CryptoJS(即)库在前端进行SHA-3哈希处理。(请参阅http://crypto- js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js ) 我想知道是否有任何Java库等效项?但是到目前为止,我还没有找到任何东西。Java SHA-3示例也不是很多。 具有SHA-3,但在Eclipse下不可见。另外,我不确定

  • 问题内容: 我需要计算大文件(或其一部分)的SHA-256哈希。我的实现工作正常,但比C 的CryptoPP计算要慢得多(25分钟vs. 30 GB文件的10分钟)。我需要的是在C 和Java中执行时间相似,因此散列几乎可以同时准备好。我也尝试了Bouncy Castle的实现,但是它给了我相同的结果。这是我如何计算哈希值: 问题答案: 我的解释可能无法解决您的问题,因为它很大程度上取决于您的实际

  • 问题内容: 我在glassfish v3.0.1 b22中使用jdbcRealm进行安全保护。通过以下博客对其进行设置,使其使用我数据库中的USER表进行身份验证:http : //blogs.oracle.com/foo/entry/mort_learns_jdbc_realm_authentication。如果我将摘要算法保留为纯文本,那么我可以正常工作。但是,当我尝试将SHA-256用于摘要