如何在WebService中使用SSL证书

作者&投稿:独钥 (若有异议请与网页底部的电邮联系)
  方法如下:
 web service在企业应用中常常被用作不同系统之间的接口方式。但是如果没有任何安全机制的话,显然是难以委以重任的。比较直接的web service加密方式就是使用HTTPS方式(SSL证书加密)加密连接,并且只允许持有信任证书的客户端连接,即SSL双向认证。这样就保证了连接来源的可信度以及数据在传输过程中没有被窃取或篡改。通过HTTPS加密方式访问web service具体方法如下:
  【准备工作】
  (1)检查JDK的环境变量是否正确。本文使用JDK 1.6
  (2)准备web服务器,这里选用TOMCAT 6.0
  (3)准备web service服务端和客户端。
  【生成证书】
  这里用到的文件,这里存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。
  1生成服务端证书
  开始-运行-CMD-在dos窗口执行下执行命令:
  keytool -genkey -v -aliastomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650-storepass zljzlj -keypass zljzlj
  说明:
  keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help
  -genkey 创建新证书
  -v 详细信息
  -alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改
  -keyalg RSA 指定算法
  -keystoreD:/SSL/server/tomcat.keystore 保存路径及文件名
  -dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" 证书发行者身份,这里的CN要与发布后的访问域名一致。但由于这里是自签证书,如果在浏览器访问,仍然会有警告提示。真正场景中建议申请CA机构(wosign)签发的SSL证书更安全。
  -validity 3650证书有效期,单位为天
  -storepass zljzlj 证书的存取密码
  -keypass zljzlj 证书的私钥
  2 生成客户端证书
  执行命令:
  keytool ‐genkey ‐v ‐aliasclient ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN" ‐validity 3650 ‐storepassclient ‐keypass client
  说明:
  参数说明同上。这里的-dname 证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。
  3 导出客户端证书
  执行命令:
  keytool ‐export ‐aliasclient ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client‐rfc ‐file D:/SSL/client/client.cer
  说明:
  -export 执行导出
  -file 导出文件的文件路径
  4 把客户端证书加入服务端证书信任列表
  执行命令:
  keytool ‐import ‐aliasclient ‐v ‐file D:/SSL/client/client.cer ‐keystoreD:/SSL/server/tomcat.keystore ‐storepass zljzl
  说明:
  参数说明同前。这里提供的密码是服务端证书的存取密码。
  5 导出服务端证书
  执行命令:
  keytool -export -aliastomcat -keystore D:/SSL/server/tomcat.keystore -storepass zljzlj -rfc -fileD:/SSL/server/tomcat.cer
  说明:
  把服务端证书导出。这里提供的密码也是服务端证书的密码。
  6 生成客户端信任列表
  执行命令:
  keytool -import -fileD:/SSL/server/tomcat.cer -storepass zljzlj -keystoreD:/SSL/client/client.truststore -alias tomcat –noprompt
  说明:
  让客户端信任服务端证书
  【 配置服务端为只允许HTTPS连接】
  1 配置Tomcat 目录下的/conf/server.xml
  Xml代码:
  <Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"clientAuth="true"
sslProtocol="TLS"keystoreFile="D:/SSL/server/tomcat.keystore"
keystorePass="zljzlj"truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="zljzlj" />
  说明:
  在server.xml里面这段内容本来是被注释掉的,如果想使用https的默认端口443,请修改这里的port参数。其中的clientAuth="true" 指定了双向证书认证。
  2 配置服务端项目web.xml
  在<welcome-file-list>之后增加Xml代码:
   <!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 -->
   <security-constraint>
   <web-resource-collection>
  <web-resource-name>SSL</web-resource-name>
  <url-pattern>/service/*</url-pattern><!--全站使用SSL <url-pattern>/*</url-pattern>-->
  </web-resource-collection>
  <user-data-constraint>
  <description>SSL required</description>
  <!-- CONFIDENTIAL: 要保证服务器和客户端之间传输的数据不能够被修改,且不能被第三方查看到 -->
  <!-- INTEGRAL: 要保证服务器和client之间传输的数据不能够被修改 -->
  <!-- NONE: 指示容器必须能够在任一的连接上提供数据。(即用HTTP或HTTPS,由客户端来决定)-->
  <transport-guarantee>CONFIDENTIAL</transport-guarantee>
   </user-data-constraint>
   </security-constraint>
  说明:
  这里限制了WEB service服务地址的访问必须为https连接。<url-pattern>要根据你的web service服务地址配置。
  【修改客户端代码】
  在执行访问之前,增加Java代码:
  System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");
  System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");
  System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
  System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");
  System.setProperty("javax.net.ssl.keyStorePassword","client");
  StringendPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService";
  ...
  通过设置参数来指定客户端连接时所使用的客户端证书,这里还可以采用修改JVM启动参数的的方式来执行,但出于不影响其他功能的考虑,这里采用System.setProperty的方式来设置这些参数,在使用结束后,可以还原这些参数配置。做为客户端的开发者,可以把拿到的证书文件后,只执行步骤3。
  本回答由网友推荐

如何在WebService中使用SSL证书~

安装SSL证书主要将SSL证书配置到服务器环境。安装教程:网页链接
目前全球服务器环境主要分为4个类型:Apache、IIS、Nginx、Tomcat

  cxf 可以在配置文件
  
  
  
  
  ">
  
  
  
  
  
  
  
  
  
  ">
  
  
  ">
  
  
  
  

  java客户端
  org.apache.cxf.endpoint.Client client = ClientProxy.getClient(service);
  Map outProp = new HashMap();
  outProp.put(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE);
  outProp.put(WSHandlerConstants.SIG_PROP_FILE,""); outProp.put(WSHandlerConstants.USER, "client");
  outProp.put(WSHandlerConstants.PW_CALLBACK_CLASS,密码);
  outProp.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial");
  client.getOutInterceptors().add(new WSS4JOutInterceptor(outProp));

  Map inProp = new HashMap();
  inProp.put(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE);
  inProp.put(WSHandlerConstants.SIG_PROP_FILE,"");
  client.getInInterceptors().add(new WSS4JInInterceptor(inProp));

java语言使用post方式调用webService方式
答:WebService可以有Get、 Post、Soap、Document四种方式调用,以下Java通过post方式调用WebService代码:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net....

如何处理 WebService 中的 Map 对象
答:对于普通的 Java 数据类型、JavaBean、List 而言,SOAP 服务可以完全将其处理(序列化与反序列化),这些都没有任何问题,但对于 Map 对象而言,似乎就有些麻烦了。请看下面这个例子:WebService(value = "/soap/ProductService", type = WebService.Type.SOAP)public interface ProductService { boolean...

WebService的主要特点有哪些?
答:举个例子来说明二者的区别:假设我们有一个提供天气预报服务的应用程序接口(API),它可以通过不同的方式来实现。一种实现方式是使用WebService,通过SOAP协议来提供和请求服务,数据以XML格式进行传输。另一种实现方式是使用RESTful API,通过HTTP协议进行通信,并使用JSON格式来封装和传输数据。这两种实现...

如何有delphi5调用webservice,别人写的webservice?
答:6、到此,WebService已经撰写完毕。接下来是调试。在我们新建的时候,Delphi已经为我们 建立了一个Unit1和其窗体,在Unit1中引用接口单元(MainImpl),然后在窗体中加一个 按钮,在按钮的单击事件中调用刚才写的WebService函数就可以调试了,代码如图: 或者使用THTTPRIO控件 7、调试成功后就可以转类型了,将Web App Debugger...

如何使用soapUI模拟webservice客户端发送请求
答:根据服务端提供的地址,在soapUI工具上创建webservice客户端请求。打开soapUI软件,在软件的左上角点击file文件,在弹出页面中有三种方式,一般新增的使用第一种new soapUI project新建一个soapUI项目。点击新建soapUI项目之后,在弹出框中,需要输入服务端的地址(注意地址后面要加上"?wsdl"英文符号),...

java调用vb webservice
答:java作为WebServices客户端,与服务器端什么语言开发关系不大,注意在字节传输过程中尽量用Byte字节类型,防止出现中文乱码。两个开发webservices的工具包:axis 和XFire 本人首先接触的是axis。 两者比较如下: 相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社区拥有众多的追随...

关于在开发时使用到的webservice的几种工具
答:Axis2的开发方式类似一个小型的应用服务器,Axis2的开发包要以WAR的形式部署到Servlet容器中,比如Tomcat,通过这些容器可以对工作中的Web Service进行很好的监控和管理。Axis2 的Web administrion模块可以让我们动态的配置Axis2.一个新的服务可以上载,激活,使之失效,修改web服务的参数。管理UI也可以管理...

Excel中网络类函数WEBSERVICE如何使用
答:网络类函数WEBSERVICE ①首先确保电脑联网,之前的版本中我们还需要通过编程或者宏来访问网络数据,现在不用了,有了这个函数,轻轻松松。下面我以人民币美元汇率运算的例子来为大家讲解。②打开Excel2013,输入函数公式:=WEBSERVICE(http://api.liqwei.com/currency/?exchange=CNY|USD&count=100),表示...

java如何调用webservice接口
答:Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。1、编写代码方式:package com.yudun.test;import java.rmi.RemoteException;import org.apache.axis.client.Call...

怎么调用外部webservice
答:直接使用http协议就可以,但是必须准守webservice的规范。Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。Web Service技术, 能使得运行...