2015-05-20 29 views
7

Viene visualizzato un errore durante la decodifica del token saml. Tuttavia, questo problema non è coerente funziona dopo il riavvio del server. E funzionava correttamente fino a ieri sera :(Errore durante la decrittografia del token 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 

All'inizio mi è stato sempre invalide errore di chiave di dimensioni che ho fissato con l'aiuto di Spring SAML ADFS: java.security.InvalidKeyException. Comunque non sono sicuro se avrà alcun impatto sul diritto politica di sicurezza degli Stati Uniti .

Ma questa eccezione decifrare non è sempre risolto e non è coerente. Qualche tempo si inizia a lavorare dopo il riavvio del server.

ho provato tutti e tutto in ultimi 2-3 giorni. ho pensato problema si verifica dopo l'aggiornamento dei metadati così ho provato ad aggiungere sotto la proprietà a ResourceBacked MetadataProvider bean ma senza fortuna.

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

Poi il debug di codice WebSSOProfileConsumerImpl.java pensato che questo mught sia il problema relativo alla jira così ho checkout il codice più recente e creare nuovi vaso e ha aggiunto al mio progetto, ma senza fortuna.

risposta

2

Dopo aver trascorso una settimana in debug e googling, ho deciso di risolvere questo problema con un piccolo trucco.

Ho controllato il codice sorgente Spring-Saml dal ramo principale di GitHub Repository e ho creato il jar e l'ho importato nel mio progetto. Ho pensato che questo problema di SES-144 fosse simile al mio, quindi ho provato con l'ultimo codice ma senza fortuna.

Così ho deciso di eseguire il debug di codice xmlTooling.jar e trovare il punto esatto di errore e ho sovrascritto il metodo sottostante decryptKey(EncryptedKey encryptedKey, String algorithm) in XMLCipher.java con il codice sottostante.

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); 

Puoi esaminare i vasi personalizzati da github

È necessario aggiornare il dipendenze SAML con righe sotto nel file di pom.xml per utilizzare questo barattolo personalizzato

<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> 

Se qualcuno trovare di meglio soluzione per favore fatemelo sapere.