Доверенный сертификат SAML

Я использую opensaml 2.6.1 и spring-security-saml2-core 1.0.1 в каком-то проекте для включения единого входа. Я использую самоподписанный сертификат для шифрования и подписи.

Когда мой поставщик услуг получил ответ SAML, я получаю следующую ошибку:

DEBUG [org.opensaml.xml.signature.SignatureValidator] Creating XMLSignature object
DEBUG [org.opensaml.xml.signature.SignatureValidator] Validating signature with signature algorithm URI: http://www.w3.org/2001/04/xmldsig-more#rsa-sha512
DEBUG [org.opensaml.xml.signature.SignatureValidator] Validation credential key algorithm 'RSA', key instance class 'sun.security.rsa.RSAPublicKeyImpl'
DEBUG [org.opensaml.xml.signature.SignatureValidator] Signature validated with key from supplied credential
DEBUG [org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Signature validation using candidate credential was successful
DEBUG [org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Successfully verified signature using KeyInfo-derived credential
DEBUG [org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Attempting to establish trust of KeyInfo-derived credential
DEBUG [org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Failed to establish trust of KeyInfo-derived credential
DEBUG [org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Failed to verify signature and/or establish trust using any KeyInfo-derived credentials
DEBUG [org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine] Attempting to verify signature using trusted credentials
DEBUG [org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine] Failed to verify signature using either KeyInfo-derived or directly trusted credentials
DEBUG [org.springframework.security.saml.websso.WebSSOProfileConsumerImpl] Validation of authentication statement in assertion failed, skipping
org.opensaml.xml.validation.ValidationException: Signature is not trusted or invalid
    at org.springframework.security.saml.websso.AbstractProfileBase.verifySignature(AbstractProfileBase.java:272)
    at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertionSignature(WebSSOProfileConsumerImpl.java:419)
    at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertion(WebSSOProfileConsumerImpl.java:292)
    at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:214)
    at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)
    at 

Что я понимаю из сообщения об исключении:

  • проверка подписи прошла успешно
  • Возникла проблема с доверием к моему сертификату Верны ли мои предположения?

Я импортировал свой самоподписанный сертификат в хранилище ключей (хранилище cacerts в JVM), используя следующую команду:

keytool -importcert -trustcacerts  -file "myCcert.crt" -keystore "C:\Program Files\Java\jdk1.8.0_65\jre\lib\security\cacerts" -storepass changeit -alias test

Разве эта команда не импортирует мой сертификат и не помечает его как доверенный для java?

Другое дело, может ли java доверять самоподписанной подписи или я должен получить сертификат, подтвержденный ЦС, чтобы пройти проверку?


person Zizou    schedule 30.12.2016    source источник
comment
Да. Java может доверять самоподписанному сертификату.   -  person anacron    schedule 30.12.2016
comment
Спасибо, anacron, Так что может быть причиной этого исключения?   -  person Zizou    schedule 30.12.2016
comment
Если вы пытаетесь внедрить SSL, вам понадобится хранилище ключей. cacerts — это хранилище доверия, а не хранилище ключей. Он отлично работает, если вы хотите получить доступ к чужому сайту SSL. Но если вы настраиваете SSL на своем сайте, вам понадобится другое хранилище ключей.   -  person anacron    schedule 30.12.2016
comment
Я использую этот сертификат для подписи/проверки. Моя сертификация добавлена ​​в cacerts, почему я все еще получаю это исключение?   -  person Zizou    schedule 30.12.2016


Ответы (1)


Spring SAML не использует cacerts для проверки доверия, а использует специальное хранилище ключей (samlKeystore.jks в примере приложения). Пожалуйста, прочитайте главу руководства Spring SAML об управлении сертификатами для получения подробной информации.

person Vladimír Schäfer    schedule 01.01.2017