2015-05-20 7 views
7

Я получаю ошибку при расшифровке токена saml. Однако эта проблема не является последовательной, она работает после перезапуска сервера. Он работает нормально до прошлой ночи :(Получение ошибки при дешифровании токена Saml

DEBUG Decrypter:631 - Attempt to decrypt EncryptedKey using credential from KEK KeyInfo resolver failed: 
     org.opensaml.xml.encryption.DecryptionException: Probable runtime exception on decryption:unknown parameter type. 
      at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:705) 
      at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:628) 
      at org.opensaml.xml.encryption.Decrypter.decryptUsingResolvedEncryptedKey(Decrypter.java:783) 
      at org.opensaml.xml.encryption.Decrypter.decryptDataToDOM(Decrypter.java:524) 
      at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:442) 
      at org.opensaml.xml.encryption.Decrypter.decryptData(Decrypter.java:403) 
      at org.opensaml.saml2.encryption.Decrypter.decryptData(Decrypter.java:141) 
      at org.opensaml.saml2.encryption.Decrypter.decrypt(Decrypter.java:69) 
      at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:199) 
      at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82) 
      at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 
      at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84) 
      at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
      at java.lang.Thread.run(Thread.java:745) 
     Caused by: java.lang.IllegalArgumentException: unknown parameter type. 
      at org.bouncycastle.jce.provider.JCERSACipher.engineInit(Unknown Source) 
      at javax.crypto.Cipher.implInit(Cipher.java:791) 
      at javax.crypto.Cipher.chooseProvider(Cipher.java:849) 
      at javax.crypto.Cipher.init(Cipher.java:1348) 
      at javax.crypto.Cipher.init(Cipher.java:1282) 
      at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1475) 
      at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:697) 
      ... 41 more 
     09:21:51,120 ERROR Decrypter:639 - Failed to decrypt EncryptedKey, valid decryption key could not be resolved 
     09:21:51,120 DEBUG Decrypter:787 - Attempt to decrypt EncryptedData using key extracted from EncryptedKey faile 

Раньше я получал invalide ключевой ошибки размера, который я установил с помощью Spring SAML ADFS: java.security.InvalidKeyException. Однако я не уверен, будет ли это иметь какое-либо влияние на законе политики безопасности США .

Но это расшифровывать исключение не получает решен и его не последовательны. через некоторое время он начинает работать после перезагрузки сервера.

Я попробовал все и все, что в последние 2-3 дня. Я думал, что проблема возникает после обновления метаданных поэтому я попробовал добавить ниже свойство в ResourceBacked МетаданныеProvider bean, но не повезло.

<property name="parserPool" ref="parserPool"/> 
<property name="minRefreshDelay" value="120000"/> 
<property name="maxRefreshDelay" value="300000"/> 

Тогда я отлаживать WebSSOProfileConsumerImpl.java код думал, что это mught быть проблема, связанная с jira поэтому я проверка последней версии кода и создать новую баночку и добавил к моему проекту, но не повезло.

ответ

2

Проведя неделю в отладке и поиске в Интернете, я решил исправить эту проблему небольшим взломом.

Я проверил исходный код Spring-Saml от Главной ветви репозитория gitHub и создаю банку и импортирую ее в свой проект. Я думал, что этот вопрос SES-144 похож на мой, поэтому я пробовал с последним кодом, но не повезло.

Итак, я решил отладить код xmlTooling.jar и найти точную точку отказа и переписать ниже метод decryptKey(EncryptedKey encryptedKey, String algorithm) в XMLCipher.java с нижеследующим кодом.

Cipher c = constructCipher(encryptedKey.getEncryptionMethod() 
        .getAlgorithm(), encryptedKey.getEncryptionMethod() 
        .getDigestAlgorithm()); 

Instead of calling 
    c.init(4, key, oaepParameters); 
used below code and removed if/else block 
    c.init(4, key); 

Вы можете оформить заказ на банки из github

Вам необходимо обновить SAML зависимость с строчками ниже в pom.xml файл, чтобы использовать этот обычай Jar

<dependency> 
    <groupId>org.springframework.security.extensions</groupId> 
    <artifactId>spring-security-saml2-core</artifactId> 
    <version>1.0.1.RELEASE</version> 

    <exclusions> 
      <exclusion> 
        <artifactId>xmlsec</artifactId> 
        <groupId>org.apache.santuario</groupId> 
      </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <artifactId>xmlsec</artifactId> 
    <groupId>org.apache.santuario</groupId> 
    <version>1.5.6-custom</version> 
</dependency> 

Если кто-то найти лучше решение, пожалуйста, дайте мне знать.