2014-11-05 6 views
5

Ich habe erfolgreich die Spring Security SAML Extension-Beispielanwendung ausgeführt. Jetzt versuche ich es in meine Hauptanwendung zu integrieren. Bevor ich versuchte, mich in meine Anwendung zu integrieren, habe ich eine Beispielanwendung erstellt, mit der ich sie integrieren kann. In meiner Beispielanwendung habe ich den Keystore aus der heruntergeladenen Beispielanwendung verwendet. Nun, ich versuche, den gleichen Schlüsselspeicher zu verwenden, und ich die folgende Fehlermeldung erhalten:java.io.IOException: Ungültiges Keystore-Format Spring Security SAML-Erweiterung

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.saml.metadata.MetadataGenerator.setKeyManager(org.springframework.security.saml.key.KeyManager); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'keyManager' defined in ServletContext resource [/WEB-INF/spring/securityContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) ... 89 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'keyManager' defined in ServletContext resource [/WEB-INF/spring/securityContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1114) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1017) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:553) ... 91 more Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270) ... 103 more Caused by: java.lang.RuntimeException: Error initializing keystore at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:121) at org.springframework.security.saml.key.JKSKeyManager.(JKSKeyManager.java:79) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ... 105 more Caused by: java.io.IOException: Invalid keystore format at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117) ... 111 more

Hier ist die Bean-Konfiguration für die JKSKeyManager:

<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager"> 
     <constructor-arg value="classpath:security/samlKeystore.jks" /> 
     <constructor-arg type="java.lang.String" value="nalle123" /> 
     <constructor-arg> 
      <map> 
       <entry key="apollo" value="nalle123" /> 
      </map> 
     </constructor-arg> 
     <constructor-arg type="java.lang.String" value="apollo" /> 
    </bean> 

mir jemand helfen kann mit dem, was verursachen dieser Fehler?

Antwort

-1

Sie können die Fehlerbehebung starten, indem Sie die samlKeystore.jks direkt in dem Webarchiv, das Sie bereitstellen, durch eines direkt aus den Spring SAML-Quellen ersetzen. Dadurch können Sie feststellen, ob das Problem im Keystore oder in Ihrem Code liegt - höchstwahrscheinlich ist es der Keystore.

Falls Sie sich mit Maven für den Bau Ihrer Anwendung, stellen Sie sicher, dass der Schlüsselspeicher im resources Ordner in Ihrem Build platziert ist, nicht in der java oder webapp. Maven neigt dazu, den Schlüsselspeicher während des Aufbaus zu beschädigen, es sei denn, er befindet sich im Ordner resources.

+0

Es befindet sich im Ordner 'resources'. Ich habe es nur im selben Sicherheitsordner wie das Beispiel. Auf welche Spring-SAML-Quellen beziehen Sie sich? – NuAlphaMan

+0

Ich bezog mich auf diese Datei https://github.com/spring-projects/spring-security-saml/blob/master/sample/src/main/resources/security/samlKeystore.jks –

+0

Ich ersetzte den Keystore wie Sie vorgeschlagen und ich bekomme immer noch den Fehler. Wir verwenden Maven, aber wie ich bereits sagte, es ist unter dem Ressourcen-Ordner. Irgendwelche anderen Vorschläge? – NuAlphaMan

3

Ich hatte ein ähnliches Problem; Ich dachte mir, Maven filterte meine Ressourcen heraus und fügte hinzu, dass das Problem gelöst wurde:

+0

Es löste das Problem! Eine Kuriosität ist, dass ich zuerst den Schlüsselspeicher in 'src/main/resources/properties/security/saml' setzen wollte, und Maven Resources filterte den Keystore. Es begann zu arbeiten, als ich 'samlKeystore.jks' zu' src/main/resources/security/'bewegte. Ich frage mich, ob der Filter "**/*. Jks" vollständig rekursiv ist oder nur mit Ordnern der ersten Ebene funktioniert. –

1

Ich hatte das gleiche Problem. Maven hat die Binärdatei falsch kopiert.

Ich hatte folgende meine Maven-Ressourcen-Plugin hinzuzufügen:

<nonFilteredFileExtensions> 
    <nonFilteredFileExtension>jks</nonFilteredFileExtension> 
</nonFilteredFileExtensions> 

Sie können dies testen, indem Sie den Befehl in Ihrem Zielverzeichnis ausgeführt wird:

keytool -list -keystore ~/<your_project_target_directory>/security/samlKeystore.jks 

Als mein Maven wurde Kopieren die Datei falsch bekam ich:

keytool error: java.io.IOException: Invalid keystore format 

Sobald ich die nonFilteredFileExtension hinzugefügt Ich wurde sofort nach dem Passwort gefragt.