首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

C#调用运用SSL/HTTPS协议来传输的axis webservice服务

2012-12-18 
C#调用使用SSL/HTTPS协议来传输的axis webservice服务碰到了个大问题,我按http://www.blogjava.net/RongHa

C#调用使用SSL/HTTPS协议来传输的axis webservice服务
碰到了个大问题,我按http://www.blogjava.net/RongHao/archive/2007/06/12/123635.html里面的第三种方式建立的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 );
   }
}


用java客房端调用的话能成功,但用c#作为客房端的话就调用不成功了,不知道怎样导入证书,
希望各位牛人能帮下忙。
[解决办法]
mark关注
[解决办法]
怎么没什么人来回答啊!CSDN的高手都哪去啦!求救啊!都被困好几天了。
[解决办法]
请教这个相同的问题! 不知你是否已解决? qq: 82036379 

引用:
怎么没什么人来回答啊!CSDN的高手都哪去啦!求救啊!都被困好几天了。

[解决办法]
同样的问题,我在axis2中还启用了rampart模块来实现ws-policy
也是java中调用成功[客户端需要好多东西]
c#中怎么调用,vb中怎么调用

热点排行