zoukankan      html  css  js  c++  java
  • Java调用使用SSL/HTTPS协议来传输的axis webservice服务

    使用SSL/HTTPS协议来传输 
    Web服务也可以使用SSL作为传输协议。虽然JAX-RPC并没有强制规定是否使用SSL协议,但在tomcat 下使用HTTPS协议。 
    1、使用JDK自带的工具创建密匙库和信任库。 

    1)通过使用以下的命令来创建服务器端的密匙库: 

    keytool -genkey -alias Server -keystore server.keystore -keyalg RSA 
    输入keystore密码: changeit 
    您的名字与姓氏是什么? 
    [Unknown]: Server 
    您的组织单位名称是什么? 
    [Unknown]: ec 
    您的组织名称是什么? 
    [Unknown]: ec 
    您所在的城市或区域名称是什么? 
    [Unknown]: beijing 
    您所在的州或省份名称是什么? 
    [Unknown]: beijing 
    该单位的两字母国家代码是什么 
    [Unknown]: CN 
    CN=Server, OU=ec, O=ec, L=beijing, ST=beijing, C=CN 正确吗? 
    [否]: y 

    输入 <Server>的主密码 
    (如果和 keystore 密码相同,按回车): 
    以上命令执行完成后,将获得一个名为server.keystore的密匙库。 

    2)生成客户端的信任库。首先输出RSA证书: 

    keytool -export -alias Server -file test_axis.cer -storepass changeit -keystore server.keystore 
    然后把RSA证书输入到一个新的信任库文件中。这个信任库被客户端使用,被用来验证服务器端的身份。 

    keytool -import -file test_axis.cer -storepass changeit -keystore client.truststore -alias serverkey -noprompt 
    以上命令执行完成后,将获得一个名为client.truststore的信任库。 

    3)同理生成客户端的密匙库client.keystore和服务器端的信任库server.truststore.方便起见给出.bat文件 
    gen-cer-store.bat内容如下: 

    set SERVER_DN="CN=Server, OU=ec, O=ec, L=BEIJINGC, S=BEIJING, C=CN" 
    set CLIENT_DN="CN=Client, OU=ec, O=ec, L=BEIJING, S=BEIJING, C=CN" 
    set KS_PASS=-storepass changeit 
    set KEYINFO=-keyalg RSA 

    keytool -genkey -alias Server -dname %SERVER_DN% %KS_PASS% -keystore server.keystore %KEYINFO% -keypass changeit 
    keytool -export -alias Server -file test_axis.cer %KS_PASS% -keystore server.keystore
    keytool -import -file test_axis.cer %KS_PASS% -keystore client.truststore -alias serverkey -noprompt 

    keytool -genkey -alias Client -dname %CLIENT_DN% %KS_PASS% -keystore client.keystore %KEYINFO% -keypass changeit 
    keytool -export -alias Client -file test_axis.cer %KS_PASS% -keystore client.keystore
    keytool -import -file test_axis.cer %KS_PASS% -keystore server.truststore -alias clientkey -noprompt 

    好的,现在我们就有了四个文件:server.keystore,server.truststore,client.keystore,client.truststore 

    2、更改Tomcat的配置文件(server.xml),增加以下部署描述符:(其实里面有,只是被注释掉了) 

    <Connector port="8440" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
    enableLookups="false" disableUploadTimeout="true" 
    acceptCount="100" scheme="https" secure="true" 
    clientAuth="true" keystoreFile="f:server.keystore" keystorePass="changeit" 
    truststoreFile="f:server.truststore" truststorePass="changeit" 
    sslProtocol="TLS" /> 

    3、把HelloWorld重新部署一次,在server-config.wsdd中修改如下部署代码。(还原了而已) 

    <service name="HelloWorld" provider="java:RPC"> 
    <requestFlow> 
    <handler type="soapmonitor"/> 
    </requestFlow> 
    <responseFlow> 
    <handler type="soapmonitor"/> 
    </responseFlow> 
    <parameter name="allowedMethods" value="sayHello"/> 
    <parameter name="className" value="HelloWorld"/> 
    </service> 

    4、修改客户端程序 TestClient.java(修改的部分已标出) 


    public class TestClient 

    public static void main(String [] args) throws Exception { 
    String endpoint = "https://localhost:" +"8440"+ "/axis/HelloWorld";//注意区别在这里!https! 

    System.setProperty("javax.net.ssl.keyStore", "E:\client.keystore"); 
    System.setProperty("javax.net.ssl.keyStorePassword", "password"); 
    System.setProperty("javax.net.ssl.trustStore", "E:\client.truststore"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "password"); 

    Service service = new Service(); 
    Call call = (Call) service.createCall(); 
    call.setTargetEndpointAddress( new java.net.URL(endpoint) ); 

    call.setOperationName( "sayHello" ); 
    String res = (String) call.invoke( new Object[] {} ); 

    System.out.println( res ); 

    生成客户端代码:

    wsdl2java -frontend jaxws21 -p client -d D:Projectdemo estWebService http://127.0.0.1:8080/testWebService/GreetingService?wsdl

            ServiceTest serviceTest = new ServiceTestService().getServiceTestPort();// 初始化对象
            String name = serviceTest.getMessage("那个谁");// 调用服务端方法
    
            System.out.println(n);// 打印返回结果

     

     

  • 相关阅读:
    Oracle第九课课后作业
    面试笔试算法题备考(一)--阿里巴巴--排序
    20 道 Spring Boot 面试题
    个人博客目录(不定期更新)
    程序员笔试面试题总结(不定时更新)
    云计算调研一
    APP开发---Windows查看端口是否被占用
    APP开发---后台设计
    D. Chocolate
    2021天梯赛
  • 原文地址:https://www.cnblogs.com/zhuawang/p/6589741.html
Copyright © 2011-2022 走看看