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

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

Откройте поставщика, дважды щелкнув его, выберите вкладку «Дополнительно» и измените «Алгоритм безопасного хеширования» на SHA-1.

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


person Manh Ha    schedule 28.07.2015    source источник


Ответы (2)


Вы должны настроить конфигурацию безопасности Spring для использования алгоритма подписи SHA-256.

Вы можете либо переопределить SAMLBootstrap, либо настроить initializing 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

Инициализация компонента:

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);
    }
}

Вы также можете пропустить настраиваемую часть и просто согласиться на это:

Инициализация компонента:

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);
    }
}
person R. Oosterholt    schedule 28.09.2016

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

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

person Yves Martin    schedule 19.07.2017