Не удалось создать путь Spring SAML PKIX для ненадежных учетных данных, которые не смогли найти действительный путь сертификации для запрошенной цели

У меня есть Spring MVC Web App, и я использую Spring SAML для аутентификации с использованием нашего корпоративного IDP (это не использует инициированный IDP SSO). При запуске веб-приложения я получаю следующую ошибку:

    DEBUG 2019-01-10 10:21:05,140 [Metadata-reload] org.springframework.security.saml.trust.MetadataCredentialResolver: Attempting PKIX path validation on untrusted credential: [subjectName='O=novell,OU=accessManager,CN=test-signing']
ERROR 2019-01-10 10:21:05,141 [Metadata-reload] org.springframework.security.saml.trust.MetadataCredentialResolver: PKIX path construction failed for untrusted credential: [subjectName='O=novell,OU=accessManager,CN=test-signing']: unable to find valid certification path to requested target
ERROR 2019-01-10 10:21:05,141 [Metadata-reload] org.opensaml.saml2.metadata.provider.SignatureValidationFilter: Signature trust establishment failed for metadata entry https://id-provider.sat.ti.census.gov/nidp/saml2/metadata
ERROR 2019-01-10 10:21:05,141 [Metadata-reload] org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider: Error filtering metadata from https://id-provider.sat.ti.census.gov/nidp/saml2/metadata
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)

Вот соответствующие фрагменты конфигурации:

    <!-- Central storage of cryptographic keys -->
            <bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
                <constructor-arg value="classpath:/mojoKeystore2"/> <!-- keystore to use -->
                <constructor-arg type="java.lang.String" value="changeit"/> <!-- keystore password -->
                <constructor-arg> <!-- map of keys and their passwords -->
                    <map>
                        <entry key="hermes-sp-private" value="changeit"/>
                    </map>
                </constructor-arg>
                <constructor-arg type="java.lang.String" value="hermes-sp-private"/> <!-- default key to use -->
</bean>
    <!-- Filter automatically generates default SP metadata -->
    <bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
        <constructor-arg>
            <bean class="org.springframework.security.saml.metadata.MetadataGenerator">
                <property name="entityId" value="urn:test:mojo:census"/>
                <property name="extendedMetadata">
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </property>
            </bean>
        </constructor-arg>
    </bean>

Вот вывод моего mojoKeystore2:

C:\work\WORKSPACE\MOJO\Hermes\FrontEnd\src\main\resources>keytool --list --keystore mojoKeystore2
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

    id-provider.sat.ti.census.gov, Jan 10, 2019, trustedCertEntry,
    Certificate fingerprint (SHA1): B7:87:30:B3:CF:50:4C:36:EC:EF:1B:47:3A:F8:EE:7A:9B:E3:BA:4B
    hermes-sp-private, Jan 9, 2019, PrivateKeyEntry,
    Certificate fingerprint (SHA1): 5A:E1:F4:75:35:20:F1:94:8E:EC:EE:E5:8A:89:93:2F:88:4D:65:DE
    ca.tco.census.gov, Jan 9, 2019, trustedCertEntry,
    Certificate fingerprint (SHA1): 0C:44:B4:2B:71:C8:C2:76:1C:7C:FC:51:75:EC:14:F5:C2:14:0D:7F

mojoKeystore2 содержит, 1) мой закрытый ключ, 2) корневой CA, который подписал сертификат IDP, и сам сертификат IDP (для хорошей меры).

Метаданные IDP загружаются нормально (эта ошибка возникает после того, как метаданные загружены и проанализированы (DigesterOutputStream выводит XML-данные метаданных на консоль), поэтому я знаю, что SSL-соединение для загрузки метаданных IDP работает нормально. Кто-нибудь знает, почему проверка пути PKIX выполняется неудачу?

Спасибо

1 ответ

Я забыл импортировать сертификат подписи, включенный в полезную нагрузку метаданных XML, в мое хранилище ключей, и после этого он работает.

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