Pregunta

¿Es posible configurar un WebServiceTemplate con un almacén de claves de Java?

editar
Estoy buscando una manera de configurar la ubicación del almacén de claves en la configuración de primavera

¿Fue útil?

Solución

Creo que se puede cargar mediante programación un almacén de claves basado en el uso de un KeyStore.Builder:

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

Así que tal vez tienen una clase que tiene una plantilla de servicio web o la extiende, a continuación, establecer la ruta del archivo de almacén de claves en él en su configuración de primavera y que sea un bean inizialing (@PostConstruct en la primavera de 3?) Que a su vez 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 - hacer uso de ella 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 org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender resorte que se puede establecer en keystoremanager. Luego de que 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

Otros consejos

Estoy publicar esta respuesta después de seis años, pero para ser honesto no hay un solo puesto, donde se proporciona una solución completa y concisa. Todo lo que necesita es primavera-ws-core (2.1.4.RELEASE +) y primavera-que-seguridad (2.2.4.RELEASE +) dependencias. El siguiente paso es configurar almacén de claves a medida y almacén de confianza como los frijoles y luego inyectarlos a la plantilla de servicio web en la configuración de la primavera.

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

<bean id="myTrustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
	<property name="location" value="file:/tmp/config/my-truststore.jks"/>
	<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">
		<bean class="org.springframework.ws.soap.security.support.TrustManagersFactoryBean">
			<property name="keyStore" ref="mytrustStore" />
		</bean>
	    </property>
	    <property name="keyManagers">
		<bean class="org.springframework.ws.soap.security.support.KeyManagersFactoryBean">
			<property name="keyStore" ref="myKeyStore" />
			<property name="password" value="password" />
		</bean>
	   </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.

Las respuestas y las preguntas que he encontrado en este post me mantuvo 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> keytool -importkeystore -srckeystore \ espacio de trabajo \ miProyecto \ webservice.keystore

Luego cambié la configuración para el almacén de claves WebLogic para que apunte a este almacén de claves. Esto se puede hacer a través de la consola de WL: Medio Ambiente-> Servidores-> AdminServer-> Keystores . Cambiar los almacenes de claves: la selección de "identidad personalizada y Confianza personalizada" y, a continuación, rellene la ruta en el Identidad (entrante), y Confianza ( salientes) secciones a su ubicación de almacén de claves. En Windows XP, la mía era en \ Documentos Las Settings \ mi ID \ .keystore.

Yo no proporcionó la frase de contraseña y yo creo que es opcional.

ú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 HTTPS conexiones

Asegúrese de que se establece la propiedad messageSender ser org.springframework.ws.transport.http.CommonsHttpMessageSender. La implementación por defecto WebServiceMessageSender no soporta HTTPS.

Estoy asumiendo que quiere decir que desea configurar el almacén de claves utilizado por JSSE, ya que es la plantilla va a utilizar. JSSE será siempre siempre mirar las propiedades del sistema javax.net.ssl.keyStore / javax.net.ssl.keyStorePassword para encontrar el almacén de claves. Puede configurar estas propiedades en la primavera usando un InitializingBean como este.

Tenga en cuenta que si está ejecutando en un servidor de aplicaciones del JSSE ya puede estar configurado antes de la primavera inicializa. En este caso es necesario utilizar la interfaz de servidor de aplicaciones para configurar el almacén de claves -. Por lo general 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);

    }
}

Debe instalar los certificados que necesita en el almacén de claves (probablemente el archivo cacerts) del JDK utilizada para ejecutar el servidor de aplicaciones utilizando herramienta de claves que comandos.

Este 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top