Не удалось создать путь 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, в мое хранилище ключей, и после этого он работает.