Расширение SAML: как перейти с алгоритма SHA-1 на SHA-2

Привет всем У меня есть проблема с расширением SAML Библиотека SAML Extension

Мне нужно переключить алгоритм подписи с SHA-1 на SHA-256, и я последовал за ответом Владимира Шефера, добавив этот фрагмент кода

public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    super.postProcessBeanFactory(beanFactory);
    BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration();
    config.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
}

в мой компонент CustomSamlBoostrap, но запрос SAML, кажется, всегда подписан с SHA-1

Это код ошибки в журнале событий на сервере ADFS.

Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSignatureAlgorithmMismatchException: MSIS7093: The message is not signed with expected signature algorithm. Message is signed with signature algorithm http://www.w3.org/2000/09/xmldsig#rsa-sha1. Expected signature algorithm http://www.w3.org/2001/04/xmldsig-more#rsa-sha256.

Если я проверяю запрос SAML с помощью инспектора Chrome, я вижу, что параметр SHA-1 передается в строку запроса:

...&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=IodfvVpOx9DAj28H4TKUc...

Я также добавил:

<property name="signingAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>

в bean-объект метаданных для компонента ServiceMetadataDelegate:

 <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
    <constructor-arg>
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
            <constructor-arg>
                <bean class="java.util.Timer"/>
            </constructor-arg>
            <constructor-arg>
                <bean class="org.opensaml.util.resource.ClasspathResource">
                    <constructor-arg value="/metadata/${adfs.sp.metadata.path}"/>
                </bean>
            </constructor-arg>
            <property name="parserPool" ref="parserPool"/>
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
           <property name="local" value="true"/>
           <property name="securityProfile" value="metaiop"/>
           <property name="sslSecurityProfile" value="pkix"/>
           <property name="sslHostnameVerification" value="default"/>
           <property name="signMetadata" value="false"/>
           <property name="signingAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
           <property name="signingKey" value="mykey"/>
           <property name="encryptionKey" value="mykey"/>
           <property name="requireArtifactResolveSigned" value="false"/>
           <property name="requireLogoutRequestSigned" value="false"/>
           <property name="requireLogoutResponseSigned" value="false"/>
           <property name="idpDiscoveryEnabled" value="false"/>                                  
        </bean>
    </constructor-arg>
</bean>

Очевидно, я создал ключ сSHA256 с RSA как -sigalg в своем хранилище ключей.

keytool -genkey -alias mykeyname256 -keyalg RSA -sigalg SHA256withRSA -keysize 2048 -validity 3650 -keystore mykeystore.jks 

Заранее спасибо.

ЧАСТИЧНО РЕШЕНО

Кажется, что один шаг решен, у меня была такая же проблема здесь /questions/27773159/ustanovka-rasshirennogo-polya-metadannyih-signaturealgorithm/27773170#27773170

и используя

config.registerSignatureAlgorithmURI("RSA", "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");

вместо

config.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);

заставить его работать о подписании запроса с SHA-256, но ошибка в журнале событий ADFS все еще происходит.

SAML request is not signed with expected signature algorithm. SAML request is signed with signature algorithm http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 . Expected signature algorithm is http://www.w3.org/2000/09/xmldsig#rsa-sha1 

Однако "Алгоритм безопасного хеширования" в настройках Доверительного участника (панель "Дополнительно") - это SHA-256, поэтому я не могу понять, почему ADFS ожидает подписи запроса с SHA-1.

Еще раз спасибо.

0 ответов

Другие вопросы по тегам