有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    我在六年后发布了这个答案,但说实话,没有一个帖子提供了完整简洁的解决方案。您只需要SpringWS-core(2.1.4.RELEASE+)和SpringWe-security(2.2.4.RELEASE+)依赖项。下一步是将自定义密钥库和信任库配置为bean,然后在spring配置中将它们注入web服务模板

    <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>

    总之,不需要编写任何代码,使用spring配置就可以轻松实现用例

  2. # 2 楼答案

    我在这篇帖子中找到的答案和问题让我有一段时间不停地追问。最后,通过将密钥库导入我的WebLogic服务器上的密钥库,我在部署到WebLogic 11g的应用程序中实现了这一点:

    C:\bea\jrockit_160_14_R27。6.5-32\jre\bin>;keytool-importkeystore-srckeystore\workspace\myProject\webservice。密钥库

    然后我更改了WebLogic密钥库的配置,以指向这个密钥库。您可以通过WL控制台执行此操作:环境->;服务器->;AdminServer->;密钥库。 将密钥库:选择更改为“自定义标识和自定义信任”,然后在标识(传入)和信任(传出)部分中填写指向密钥库位置的路径。在Windows XP上,我的在\Documents a Settings\my id\中。密钥库

    我没有提供密码短语,我相信它是可选的

  3. # 3 楼答案

    我假设您的意思是要配置JSSE使用的密钥库,因为这是模板将使用的密钥库。JSSE将始终关注javax。网ssl。keyStore/javax。网ssl。keyStorePassword系统属性以查找密钥库。您可以在Spring中使用这样的InitializingBean配置这些属性

    请注意,如果您在应用服务器中运行,那么在Spring初始化之前可能已经配置了JSSE。在这种情况下,您需要使用app server界面来设置密钥库——通常在命令行中使用-D参数

    <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);
    
        }
    }
    
  4. # 4 楼答案

    您应该在JDK的密钥库(可能是cacerts文件)中安装所需的证书,JDK用于使用keytool命令运行应用服务器

    下面是一个示例命令:

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

    编辑:根据更新后的问题,看起来这可能就是你要找的:http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

  5. # 5 楼答案

    这个帖子的回复很晚,但无论如何:请注意,一旦你设置了密钥库和其他所有内容,你可能会震惊地发现WebServiceTemplate似乎不支持HTTPS连接

    确保将messageSender属性设置为org.springframework.ws.transport.http.CommonsHttpMessageSender。默认的WebServiceMessageSender实现不支持HTTPS

  6. # 6 楼答案

    我认为可以使用密钥库以编程方式加载基于密钥库的密钥库。建筑商:

    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

    因此,也许有一个类有一个webservice模板或对其进行了扩展,然后在spring配置中设置密钥库的文件路径,并使其成为一个初始化bean(spring 3中的@PostConstruct?)然后加载密钥库

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

    好的——要在webservicetemplate中实际使用它,我认为它必须基于这里记录的密钥库回调:http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462

    或者使用spring组织。springframework。ws。运输http。HttpsUrlConnectionMessageSender,您可以在其上设置keystoremanager。然后你的webservicetemplate就可以使用它了

    有点像这样:

    <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>