2010-03-10 19 views

Respuesta

1

Creo que se puede cargar mediante programación una almacén de claves basado en el uso de un 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

Entonces, tal vez tenga una clase que tenga una plantilla de servicio web o la extienda, luego establezca la ruta de archivo del almacén de claves en su configuración de primavera y conviértala en un bean inizialing (@PostConstruct en Spring 3?) Que luego carga el almacén de claves.

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

Ok - para realmente utilizarlo con su webservicetemplate creo que debe basarse en torno a la devolución de llamada almacén de claves tal como se documenta aquí: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462

O tal vez mediante el uso de la primavera org.springframework.ws.transport.http .HttpsUrlConnectionMessageSender en el que puede establecer keystoremanager. Entonces eso puede ser utilizado por su webservicetemplate.

Un poco como esto:

<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

Debe instalar los certificados que necesita en el almacén de claves (probablemente el archivo cacerts) del JDK usado para ejecutar su servidor de aplicaciones usando el comando keytool.

Aquí es un ejemplo del comando:

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

Editar: En base a la pregunta actualizado parece que esto puede ser lo que buscas: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

+0

@Taylor L - Gracias, aunque realmente estoy buscando una forma de configurar la ubicación del almacén de claves en primavera. Actualizaré mi pregunta para reflejar eso. –

+0

Eche un vistazo a esto: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html –

+0

L - Sí, esa página es una buena referencia. Pero ¿cómo conectaría una WebServiceTemplate con un keystore ...? –

1

última contestación en este hilo, pero de todos modos: tenga en cuenta que una vez que tenga el almacén de claves y todo lo demás configurado, es posible que se sorprendió al descubrir que el ¡WebServiceTemplate no parece ser compatible con las conexiones HTTPS!

Asegúrese de establecer la propiedad messageSender en org.springframework.ws.transport.http.CommonsHttpMessageSender. La implementación predeterminada WebServiceMessageSender no es compatible con HTTPS.

1

Supongo que quiere decir que quiere configurar el almacén de claves utilizado por JSSE, ya que esa es la plantilla que usará. JSSE siempre buscará siempre las propiedades del sistema javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword para encontrar el almacén de claves. Puede configurar estas propiedades en Spring usando InitializingBean como este.

Tenga en cuenta que si se está ejecutando en un servidor de aplicaciones, es posible que JSSE ya esté configurado antes de que Spring se inicie. En este caso, debe usar la interfaz del servidor de la aplicación para establecer el almacén de claves, generalmente usando -D params en la línea de comandos.

<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

Las respuestas y las preguntas que encontré en esta publicación me mantuvieron persiguiendo mi cola por un tiempo.Al final conseguí este trabajo para una aplicación Desplegué a WebLogic 11g importando el almacén de claves en el almacén de claves en mi servidor Weblogic:

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

Luego modifiqué la configuración del almacén de claves de WebLogic para que apuntara a este almacén de claves. Puede hacerlo a través de la consola WL: Environment-> Servers-> AdminServer-> Keystores. Cambiar almacenes de llaves: la selección de "identidad personalizada y Confianza personalizada", a continuación, se llenan en la ruta en el Identidad (entrante), y Confianza (salientes) secciones a su ubicación de almacén de claves. En Windows XP, el mío estaba en \ Documents an Settings \ my id \ .keystore.

No proporcioné la frase de contraseña y creo que es opcional.

9

Estoy publicando esta respuesta después de seis años, pero para ser sincero, no hay una sola publicación donde se proporcione una solución completa y concisa. Todo lo que necesita son dependencias spring-ws-core (2.1.4.RELEASE +) y spring-we-security (2.2.4.RELEASE +). El siguiente paso es configurar keystore y truststore personalizados como beans y luego insertarlos en la plantilla del servicio web en la configuración de 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>

En veraniega no hay necesidad de escribir ningún código, el caso de uso puede lograrse fácilmente usando config primavera.

Cuestiones relacionadas