SAML подпись Spring Security вызвала исключение

Я использую Spring Security SAML в нашем приложении в течение некоторого времени. Теперь меня попросили добавить подпись утверждения к нашим метаданным SP. Мы сохраняем метаданные SP в БД (у нас несколько арендаторов, поэтому это был самый удобный способ). Вот действия, которые я предпринял для достижения этой цели:

  1. Создание самозаверяющего сертификата и закрытого ключа с помощью следующей команды:

    • openssl req -x509 -nodes -newkey rsa:2048 -days 3650 -sha256 -keyout saml-key.key -out saml-cert.pem
  2. Создание JKS с этим ключом и сертификатом:

    • cat saml-key.key saml-cert.pem | openssl pkcs12 -export -out cert.p12

    • keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore myKeystore.jks

На данный момент я предполагаю, что у меня есть правильный JKS, который я собираюсь использовать в своем приложении. единственное, в чем я сомневаюсь, это псевдоним (я не устанавливал его явно, а в сертификате было установлено "Псевдоним: 1")

  1. Метаданные SP поколения с https://www.samltool.com/sp_metadata.php Оба сертификата X.509 я заполнил значением из своего saml-cert.pem. Закрытый ключ для подписи метаданных, которые я скопировал из saml-key.key

  2. Обновление securityContext.xml:

KeyManager:

    <bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
        <constructor-arg value="classpath:security/samlKeystore.jks"/>
        <constructor-arg type="java.lang.String" value="mypassword"/>
        <constructor-arg>
            <map>
                <entry key="myapp" value="mypassword"/>
            </map>
        </constructor-arg>
        <constructor-arg type="java.lang.String" value="myapp"/>
    </bean>

ExtendedMetadataDelegate:

    <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
        <constructor-arg>
            <bean class="com.mycompany.sso.MyResourceBackedMetadataProvider">
                <constructor-arg><bean class="java.util.Timer"/></constructor-arg>
                <constructor-arg ref="spMetadata" />                    
                <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="true"/>
               <property name="signingKey" value="myapp"/>
               <property name="encryptionKey" value="myapp"/>
               <property name="tlsKey" value="myapp"/>
               <property name="requireArtifactResolveSigned" value="true"/>
               <property name="idpDiscoveryEnabled" value="false"/>
               <property name="supportUnsolicitedResponse" value="false"/>
               <property name="signingAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            </bean>
        </constructor-arg>
    </bean>        

Проблема со всем этим заключается в следующем: Когда я запускаю свое приложение с Tomcat, я получаю следующее исключение:

Caused by: org.opensaml.saml2.metadata.provider.FilterException: Signature trust establishment failed for metadata entry
    at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:327)
    at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.processEntityDescriptor(SignatureValidationFilter.java:178)
    at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:156)
    at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493)
    at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:398)
    ... 145 common frames omitted

Это исключение не появляется, если я удаляю <ds:Signature> раздел из метаданных ИП. Поэтому я могу догадаться, что это вызывает эту проблему.

Помоги мне понять, что я сделал не так.

0 ответов

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