Java客户端调用Https Webservice

Java 要调用远程Https webservice 必需具用远程服务器提供的客户端信任书及密钥.

将client.keystore和client.truststore拷贝到classes\test目录下.

 package test;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
   public class TestEcVoteNotice
   {
      public static void main(String [] args) throws Exception {
       System.setProperty("javax.net.ssl.keyStore", "test\\client.keystore");
        System.setProperty("javax.net.ssl.keyStorePassword", "abc");
        System.setProperty("javax.net.ssl.trustStore", "test\\client.truststore");
        System.setProperty("javax.net.ssl.trustStorePassword", "abc");
        //System.setProperty("javax.net.debug", "ssl");
        //System.setProperty("https.protocols", "TLSv1");
        //System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");


      String endpoint = "https://localhost:" +"8443"+ "/axis/services/EcVoteNotice";
      //String endpoint = "http://localhost:" +"8080"+ "/axis/services/EcVoteNotice";
          Service  service = new Service();
          Call     call    = (Call) service.createCall();
        call.setTargetEndpointAddress( new java.net.URL(endpoint) );
        call.setOperationName("toStringP");
        String res = (String) call.invoke( new Object[] {"Box"} );
        call.setOperationName("toString");
        String res2 = (String) call.invoke( new Object[] {} );
      
        System.out.println( res+"/"+res2 );
      }
   }

在classes目录下执行.

java -cp %AXISCLASSPATH% test.TestEcVoteNotice 

WebService 是基于SOAP协议传输的,SOAP是以XML文件形式进行信息传输,是明文,这是不安全的,所以我们可以在WebService加上SSL/HTTPS协议来进行数据传输
基于Axis的WebService可以很好的实现,在这里我们使用tomcat服务器
使用JDK自带的工具创建密匙库和信任库。

  1)通过使用以下的命令来创建服务器端的密匙库:
   keytool -genkey -alias Server -keystore server.keystore -keyalg RSA
  输入keystore密码:  strongit
  您的名字与姓氏是什么?
  [Unknown]:  Server
  您的组织单位名称是什么?
  [Unknown]:  ec
  您的组织名称是什么?
  [Unknown]:  ec
  您所在的城市或区域名称是什么?
  [Unknown]:  nanchang
  您所在的州或省份名称是什么?
  [Unknown]:  jiangxi
  该单位的两字母国家代码是什么
  [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 strongit-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内容如下: 
    
1set SERVER_DN="CN=Server, OU=ec, O=ec, L=nanchang, S=jiangxi, C=CN"
2    set CLIENT_DN="CN=Client, OU=ec, O=ec, L=nanchang, S=jiangxi, C=CN"
3    set KS_PASS=-storepass strongit
4    set KEYINFO=-keyalg RSA
1keytool -genkey -alias Server -dname %SERVER_DN% %KS_PASS% -keystore server.keystore %KEYINFO% -keypass strongit <br>     keytool -export -alias Server -file test_axis.cer %KS_PASS% -keystore server.keystore <br>     keytool -import -file test_axis.cer %KS_PASS% -keystore client.truststore -alias serverkey -noprompt <br><br>     keytool -genkey -alias Client -dname %CLIENT_DN% %KS_PASS% -keystore client.keystore %KEYINFO% -keypass strongit <br>     keytool -export -alias Client -file test_axis.cer %KS_PASS% -keystore client.keystore <br>     keytool -import -file test_axis.cer %KS_PASS% -keystore server.truststore -alias clientkey -noprompt


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

更改Tomcat的配置文件(server.xml),增加以下部署描述符:(其实里面有,只是被注释掉了) 
      
1<Connector port="8440" 
2               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3               enableLookups="false" disableUploadTimeout="true"
4               acceptCount="100" scheme="https" secure="true"
5               clientAuth="true" keystoreFile="f:\server.keystore" keystorePass="changeit"
6                 truststoreFile="f:\server.truststore" truststorePass="changeit"
7               sslProtocol="TLS" />

这里主要讲如何使用JDK自带的工具创建密匙库和信任库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值