2010-03-10 12 views

risposta

1

Penso che si possa programatically caricare un chiavi basato usando KeyStore.Builder:

http://java.sun.com/j2se/1.5.0/docs/api/java/security/KeyStore.Builder.html#newInstance%28java.lang.String,%20java.security.Provider,%20java.io.File,%20java.security.KeyStore.ProtectionParameter%29

Quindi forse una classe che ha un modello di servizio web o lo estende, quindi imposta il percorso del file del keystore su di esso nella tua Spring Config e rendilo un bean di inizializzazione (@PostConstruct in Spring 3?) Che poi carica il keystore.

File f = new File(keyStorePath); 
KeyStore.Builder builder = KeyStore.Builder.newInstance("type",provider,file,protection); 
KeyStore keystore = builder.getKeyStore(); 

Ok - effettivamente usarlo con il tuo webservicetemplate penso che deve essere basata in tutto il callback chiavi come documentato qui: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462

O forse utilizzando l'org.springframework.ws.transport.http primavera .HttpsUrlConnectionMessageSender su cui è possibile impostare keystoremanager. Quindi può essere usato dal tuo webservicetemplate.

Un po 'come questo:

<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate"> 
    <property name="messageSender"> 
     <bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender"> 
      <property name=""></property> 
     </bean> 
    </property> 
</bean> 

HTH

0

È necessario installare i certificati necessari nel keystore (probabilmente il file cacerts) del JDK utilizzato per eseguire il tuo server delle app utilizzando il comando keytool.

Ecco un esempio del comando:

keytool -import -trustcacerts -alias someAlias -file someCert.crt -keystore yourKeystore 

Edit: Sulla base della domanda aggiornato sembra che questo potrebbe essere quello che stai cercando: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

+0

@Taylor L - Grazie, anche se in realtà sto cercando un modo per configurare la posizione del keystore in primavera. Aggiornerò la mia domanda per riflettere questo. –

+0

Dai un'occhiata a questo: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html –

+0

L - Sì, quella pagina è un buon riferimento. Ma come collegherei un WebServiceTemplate con un keystore ... –

1

risposta ritardo su questo thread, ma in ogni caso: si noti che una volta che avete il vostro chiavi e tutto il resto impostato, si può essere sorpreso di scoprire che la WebServiceTemplate non sembra supportare le connessioni HTTPS!

Assicurarsi di impostare la proprietà messageSender su org.springframework.ws.transport.http.CommonsHttpMessageSender. L'implementazione di default WebServiceMessageSender non supporta HTTPS.

1

Suppongo che intendi che desideri configurare il keystore utilizzato da JSSE, poiché verrà utilizzato il modello. JSSE guarderà sempre alle proprietà del sistema javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword per trovare il keystore. Puoi configurare queste proprietà in primavera usando un InitializingBean come questo.

Si noti che se si sta eseguendo in un app server, il JSSE potrebbe essere già configurato prima che Spring inizializzi. In questo caso è necessario utilizzare l'interfaccia del server delle app per impostare il keystore, in genere utilizzando i parametri -D sulla riga di comando.

<bean id="jsseInitializer" lazy-init="false" class="com.blah.JsseInitializer"> 
     <property name="trustStoreLocation" value="${pnet.batch.trustStore.location}"/> 
     <property name="trustStorePassword" value="${pnet.batch.trustStore.password}"/> 
     <property name="keyStoreLocation" value="${pnet.batch.keyStore.location}"/> 
     <property name="keyStorePassword" value="${pnet.batch.keyStore.password}"/> 
</bean> 


public class JsseInitializer implements InitializingBean { 

    private String trustStoreLocation; 
    private String trustStorePassword; 
    private String keyStoreLocation; 
    private String keyStorePassword; 

    public String getTrustStoreLocation() { 
     return trustStoreLocation; 
    } 


    public void setTrustStoreLocation(String trustStoreLocation) { 
     this.trustStoreLocation = trustStoreLocation; 
    } 


    public String getTrustStorePassword() { 
     return trustStorePassword; 
    } 


    public void setTrustStorePassword(String trustStorePassword) { 
     this.trustStorePassword = trustStorePassword; 
    } 


    public String getKeyStoreLocation() { 
     return keyStoreLocation; 
    } 


    public void setKeyStoreLocation(String keyStoreLocation) { 
     this.keyStoreLocation = keyStoreLocation; 
    } 


    public String getKeyStorePassword() { 
     return keyStorePassword; 
    } 


    public void setKeyStorePassword(String keyStorePassword) { 
     this.keyStorePassword = keyStorePassword; 
    } 

    public void afterPropertiesSet() throws Exception { 
     System.setProperty("javax.net.ssl.trustStore", trustStoreLocation); 
     System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword); 
     System.setProperty("javax.net.ssl.keyStore", keyStoreLocation); 
     System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); 

    } 
} 
2

Le risposte e le domande che ho trovato in questo post mi hanno tenuto a rincorrere la coda per un po '.Alla fine ho ottenuto questo lavoro per un'applicazione ho schierato a WebLogic 11g importando l'archivio di chiavi nell'archivio chiavi sul mio server Weblogic:

C: \ bea \ jrockit_160_14_R27.6.5-32 \ jre \ bin> keytool -importkeystore -srckeystore \ workspace \ myProject \ webservice.keystore

Quindi ho modificato la configurazione per il keystore WebLogic in modo che punti a questo keystore. È possibile farlo attraverso la console WL: Ambiente-> Server-> AdminServer-> Keystores. Modificare le Keystore: selezione "Custom Identity and Trust Custom", quindi compilare il percorso nel Identity (in arrivo), e Fiducia (in uscita) sezioni alla tua posizione chiavi. Su Windows XP, il mio era in \ Documents a Settings \ my id \ .keystore.

Non ho fornito la passphrase e credo che sia facoltativa.

9

Sto postando questa risposta dopo sei anni ma, ad essere sinceri, non c'è un singolo post in cui sia fornita una soluzione completa e concisa. Tutto ciò che serve sono le dipendenze spring-ws-core (2.1.4.RELEASE +) e spring-we-security (2.2.4.RELEASE +). Il passaggio successivo consiste nel configurare il keystore personalizzato e il truststore come bean e quindi inserirli nel modello del servizio Web nella configurazione di primavera.

<bean id="myKeyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean"> 
 
\t <property name="location" value="file:/tmp/config/my-keystore.jks"/> 
 
\t <property name="password" value="password"/> 
 
</bean> 
 

 
<bean id="myTrustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean"> 
 
\t <property name="location" value="file:/tmp/config/my-truststore.jks"/> 
 
\t <property name="password" value="different_password"/> 
 
</bean> 
 

 
<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate"> 
 
    <property name="messageSender"> 
 
     <bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender"> 
 
      <property name="trustManagers"> 
 
\t \t <bean class="org.springframework.ws.soap.security.support.TrustManagersFactoryBean"> 
 
\t \t \t <property name="keyStore" ref="mytrustStore" /> 
 
\t \t </bean> 
 
\t  </property> 
 
\t  <property name="keyManagers"> 
 
\t \t <bean class="org.springframework.ws.soap.security.support.KeyManagersFactoryBean"> 
 
\t \t \t <property name="keyStore" ref="myKeyStore" /> 
 
\t \t \t <property name="password" value="password" /> 
 
\t \t </bean> 
 
\t </property> 
 
     </bean> 
 
    </property> 
 
</bean>

In estiva non occorre scrivere alcun codice, il caso d'uso può essere realizzato facilmente utilizzando molla config.

Problemi correlati