Настройте Spring Security SAML для использования SHA-256 в качестве безопасного хэш-алгоритма

Я работаю над интеграцией между Spring SAML и Microsoft ADFS 3.0. Даже это уже указано в документация Spring SAML as:

откройте поставщика, дважды щелкнув его, выберите вкладку Дополнительно и измените "Безопасный алгоритм хэширования" для SHA-1

что я понимаю, что Spring SAML поддерживает в настоящее время только SHA-1 в качестве хэш-алгоритма, но мое требование использует SHA-256. Если я попробую настроить только в ADFS для SHA-256, это не работает. Полагаю, я должен что-то сделать с весенним СЭМЛОМ. Вы знаете, как это сделать?

2 ответов


вы должны настроить конфигурацию безопасности 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.свойства):
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);
    }
}

Я рекомендую обратиться к этому проекту примера GitHub:https://github.com/choonchernlim/spring-security-adfs-saml2

который предоставляет ADFS выделенную информацию о конфигурации и сведения о том, как включить подпись SHA-256.