2014-10-02 14 views
10

Ho generato il file testIdp.cer copiando 509 voci dell'IDP che sto pianificando di connettere. Poi ho creato il file JKS eseguendo il comando seguenteLe voci di certificato attendibili non sono protette da password Spring SAML

keytool -importcert -alias adfssigning -keystore C:\Users\user\Desktop\samlKeystore.jks -file C:\Users\user\Desktop\testIdp.cer 

Quando eseguito ha chiesto di inserire una password per il quale ho dato una parola d'accesso. Per la domanda "Fidati di questo certificato? [No]:", ho dato "y" come input. Il messaggio è uscito come "Il certificato è stato aggiunto al keystore".

Poi ho configurato i seguenti dettagli in securityContext.xml

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

<bean class="org.springframework.security.saml.metadata.ExtendedMetadata"> 
    <property name="alias" value="adfssigning" /> 
    <property name="signingKey" value="adfssigning"/>  
</bean> 

Ma quando faccio funzionare l'applicazione, ottengo le seguenti due eccezioni quando il server sta iniziando e quando carico la home page dell'applicazione. Qualcuno può farmi sapere se mi manca qualcos'altro.

Questa eccezione è in corso quando avvio il server

Caused by: 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.processEntityGroup(SignatureValidationFilter.java:240) 
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:158) 
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493) 
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:395) 

Questa eccezione si sta verificando quando ho eseguito la home page della mia applicazione

java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected 
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source) 
at java.security.KeyStore.getEntry(Unknown Source) 
at org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132) 
+0

Hi Kumar, Come avete risolto il problema? Anch'io devo affrontare lo stesso tipo di problema.Si prega di passare attraverso questo link. http://stackoverflow.com/questions/33369965/trusted-certificate-entries-are-not-password-protected-java Si prega di guida mi ha un @vschafer soluzione – praneeth

risposta

8

Il certificato .cer contiene solo una chiave pubblica, è mustn 't definire <entry key="adfssigning" value="mypassword"/> per le chiavi pubbliche; può essere usato solo per quelli privati. Basta estrarre la voce adfssigning e assicurarsi di includere una chiave privata, proprio come nell'applicazione di esempio SAML di primavera.

Il keystore SAML può contenere due tipi di chiavi di base: pubblici e privati ​​(oltre ai relativi certificati). Ogni chiave ha un alias che viene usato per riferirsi ad esso. Il keystore stesso può essere protetto da una password (fornita nel secondo parametro del costruttore), inoltre ogni chiave privata può essere protetta anche da una password aggiuntiva (queste sono definite nel terzo parametro del costruttore in una mappa di alias-> password). Le chiavi pubbliche che importate nel keystore (proprio come avete fatto con il comando sopra) non devono essere definite in questa mappa. Saranno automaticamente disponibili dopo essere stati importati senza ulteriori dichiarazioni. Perché il SAML di Spring funzioni, il keystore deve contenere almeno una chiave privata (l'applicazione di esempio contiene la chiave privata con alias apollo) e il suo alias deve essere fornito nel terzo parametro del costruttore.

L'esempio sopra riportato non riesce, poiché è stata importata una chiave pubblica, ma inclusa nella mappa che può essere utilizzata solo per le chiavi private.

+0

Intendi dire che nalle123 mappato all'argomento 2 e 3 del costruttore nell'applicazione campione SAML di primavera corrispondono alla stessa chiave privata? Come per l'argomento della documentazione 2 corrisponde alla password del file keystore. Nella domanda di campionamento saml primavera, credo che sia solo una coincidenza che la password del file keystore e quella privata siano la stessa cosa. Come posso recuperare la chiave privata? –

+0

@vschafer Intendete dire che nalle123 mappato agli argomenti 2 e 3 del costruttore nell'applicazione di esempio SAML di primavera corrisponde alla stessa chiave privata? Come per l'argomento della documentazione 2 corrisponde alla password del file keystore. Nella domanda di campionamento saml primavera, credo che sia solo una coincidenza che la password del file keystore e quella privata siano la stessa cosa. Come posso creare JKS? Attualmente ho solo il certificato pubblico che viene aggiunto in un file .cer e sto usando il comando keytool -importcert -alias adfssigning -keystore samlKeystore.jks -file testIdp.cer –

+0

Ho aggiornato la risposta con ulteriori spiegazioni. Per i dettagli su come creare JKS e importare le chiavi, consultare il manuale Spring SAML o la documentazione Java. –

3

Vladimir ha risposto correttamente alla domanda perché l'errore si verifica. Nella mia risposta voglio mostrare come è possibile importare un certificato al chiavi per risolvere il problema:

È necessario importare il certificato e chiave privata che non poteva essere fatto direttamente da keytool.

La soluzione descritta in dettaglio si trova qui: https://stackoverflow.com/a/8224863/1909531

Ecco un estratto:

openssl pkcs12 -export -in server.crt -inkey server.key \ 
      -out server.p12 -name [some-alias] \ 
      -CAfile ca.crt -caname root 

keytool -importkeystore \ 
    -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \ 
    -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \ 
    -alias [some-alias] 
Problemi correlati