Web Service
详细解析及使用方法
XFire篇
XFire简介
它拥有一个轻量级的信息处理模块,通过
STAX
来与
SOAP
信息相结合。提供了一个工作在
web services
下的简单
API
,支持
POJO
和
schema
开发。
XFire
是
CodeHaus
推出的下一代的
Java SOAP
框架,
它构建了
POJO
和
SOA
之间的桥梁,主要特性就是支持将
POJO
通过非常简单的方式发布成
Web
服务,这种处理方式不仅充分发挥了
POJO
的作用,简化了
Java
应用转化为
Web
服务的步骤和过程,也直接降低了
SOA
的实现难度,为企业转向
SOA
架构提供了一种简单可行的方式。
通过提供简单的
API
和支持标准协议,可以很方便的开发面向服务的程序。内建在
STAX
基于流的
XML
解析引擎的基础上,
XFire
拥有很高的性能。
XFire特性
1)
、
支持重要的
web
服务标准,如
SOAP
、
WSDL
、
WS-I
、
WS-Addressing
、
WS-Security
基本概要等
2)
、
高性能的
SOAP
栈设计
3)
、
可插拔的绑定,支持
POJO
、
XMLBeans
、
JAXB1.1
、
JAXB2
及
castor
4)
、
jsr181
规范
5)
、
支持多种传输协议:
HTTP
、
JMS
、
XMPP
、
In-JVM
6)
、
可嵌入式的
API
7)
、
JBI
支持
8)
、
客户端和服务器端的存根创建工具
9)
、
JAX-WS
的早期支持
XFire使用
首先打开
IDE
,创建一个普通的
Java
工程,将
XFire
所需要的
jar
加入到工程的类库引用中。创建一个简单的
Java
文件,这个文件只有一个名为
sayHello
的成员方法。
//
包名
package
net.ruixin.webservicedemo;
/**
*
服务实现类的实现
* @author caoxiang
*/
public
class HelloWorldServiceImpl implements IHelloWorldService {
/**
*
返回名称的方法
* @param name
名称
*/
public String sayHello(String name){
return "
您好
,"+name;
}
}
//
包名
package
net.ruixin.webservicedemo;
/**
*
服务接口类的创建
* @author caoxiang
*/
public
interface IHelloWorldService {
/**
*
返回名称的方法
* @param name
名称
* @return
返回值
*/
public String sayHello(String name);
}
配置services.xml
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<serviceClass>
net.ruixin.webservicedemo.IHelloWorldService
</serviceClass>
<implementationClass>
net.ruixin.webservicedemo.HelloWorldServiceImpl
</implementationClass>
<scope>application</scope>
</service>
</beans>
标签说明
:
WebService
的服务名
<name>HelloWorldService</name>
WebService
的服务接口类
<serviceClass>net.ruixin.webservicedemo.IHelloWorldService
</serviceClass>
WebService
的服务接口实现类
<implementationClass>net.ruixin.webservicedemo.HelloWorldServiceImpl</implementationClass>
WebService
的服务有效范围
<scope>application</scope>
//
包名
package
net.ruixin.webservicedemo;
import
java.net.MalformedURLException;
import
org.codehaus.xfire.XFireFactory;
import
org.codehaus.xfire.client.XFireProxyFactory;
import
org.codehaus.xfire.service.Service;
import
org.codehaus.xfire.service.binding.ObjectServiceFactory;
/**
*
测试服务类的创建
* @author caoxiang
*/
public
class HelloWorldClient {
/**
*
测试主程序
* @param args
* @throws Exception
*/
public static void main(String args[]) {
//
通过接口类创建
Service
对象
Service srvcModel = new ObjectServiceFactory()
.create(IHelloWorldService.class);
//
通过
XFire
的工厂类创建工厂对象
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//
访问的地址
String helloWorldURL="http://localhost:5200/xfire_sample/services/HelloWorldService";
//
异常处理
try {
//
创建服务对象
IHelloWorldService srvc = (IHelloWorldService) factory.create(srvcModel, helloWorldURL);
//
调用服务中的方法,并显示其结果
System.out.print(srvc.sayHello("dennis"));
//
异常处理
} catch (MalformedURLException e) {
//
显示错误信息
e.printStackTrace();
}
}
}
XFire
、
Axis
以及其他的一些商业产品都提供了
wsdl
文档创建客户端代码的工具。这里
用
XFire
提供的
wsgen
工具来创建客户端的访问代码。
Wsgen
是
XFire
提供的一个
ant task,task
的申明如下:
<target name="Wsgen">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="build.classpath" />
<wsgen outputDirectory="build.classpath" wsdl="http://localhost:portno/xfire_sample/services/HelloWorldService?wsdl" package="client" />
</target>
outputDirectory
属性定义了创建代码的存放路径,
wsdl
是
web
服务的
wsdl
文件,
package
代表创建的代码的
package
。还可以通过
binding
属性指定
bind
类型,
jaxb
或者是
xmlbeans
。
这样就会在
outputDirectory
属性指定的目录下创建多个
Java
文件,这些文件提供了访问
web
服务的方法。
XFire
框架中,我们有两种方式将
POJO
发布成
Web
服务:
方式
1
:直接使用
Web
服务接口和
Web
服务实现类(
POJO
)来发布
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<serviceClass>
net.rubyeye.webservicedemo.IHelloWorldService
</serviceClass>
<implementationClass>
net.rubyeye.webservicedemo.HelloWorldServiceImpl
</implementationClass>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>
</beans>
方式
2
:基于
JSR181
标准和注释技术将被注释的
POJO
发布成
Web
服务;
package
com.test;
import
javax.jws.WebMethod;
import
javax.jws.WebParam;
import
javax.jws.WebResult;
import
javax.jws.WebService;
@WebService(name="Hello",serviceName="Hello",
targetNamespace="http://www.oksonic.cn/xfire")
public
class Hello {
@WebMethod
@WebResult
public String getName(@WebParam String name){
return "Hello world " + name;
}
}
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<serviceClass>com.test.Hello</serviceClass>
<serviceFactory>jsr181</serviceFactory>
</service>
</beans>
XFire总结
XFire
做为
Java SOAP
的开发框架,具备一定的优越性,比如他能够快速的开发,能够比较容易的部署到服务器上,做为
soap4j
的下一代开源框架,
XFire
不但拥有了上一代的优势,而且在其优势的基础上也进行了一定的扩展,增加了许多的扩展,对于
webservice
的开发,
XFire
做到了可以快速开发,快速部署,在服务器方面,
XFire
的性能比较优越,相比其他的
web service
框架,
XFire
的性能也是比较优越的。
XFire
在发布之后,如果客户端需要使用已经发布的
web service
,那么他就必须通过服务端程序生成客户端代码或者将服务端的接口类写入到客户端,在这方面
Axis
做得比
XFire
要好,因为
Axis
是面向
wsdl
的,针对的是服务的描叙,而并非是服务的本质(类和接口),对于使用者来说
XFire
开发简单,部署方便,性能优越这些都是
XFire
作为
web service
的优势所在,正如敏捷式一书的作者,这么说过,作为开发效率和速度是最重要的。
Axis篇
Axis简介
Axis
是
Apache
组织推出的
SOAP
引擎,
Axis
项目是
Apache
组织著名的
SOAP
项目的后继项目,目前最新版本是采用
Java
开发的
1.1
版本,
C++
的版本正在开发之中。
Axis v1.1
软件包可以从
http://ws.apache.org/axis/dist/1_1/
下载得到。
但是 Axis 不仅仅是一个 SOAP 引擎,它还包括:
1) 、 一个独立运行的 SOAP 服务器
2) 、一个 servlet 引擎的插件,这个 servlet 引擎可以是 Tomcat
3) 、对 WSDL 的扩展支持
4) 、一个将 WSDL 的描述生成 JAVA 类的工具
5) 、一些示例代码
6) 、还有一个监控 TCP/IP 包的工具
但是 Axis 不仅仅是一个 SOAP 引擎,它还包括:
1) 、 一个独立运行的 SOAP 服务器
2) 、一个 servlet 引擎的插件,这个 servlet 引擎可以是 Tomcat
3) 、对 WSDL 的扩展支持
4) 、一个将 WSDL 的描述生成 JAVA 类的工具
5) 、一些示例代码
6) 、还有一个监控 TCP/IP 包的工具
SOAP简介
SOAP
是一个基于
XML
的用于应用程序之间通信数据编码的传输协议。最初由微软和
Userland Software
提出,随着不断地完善和改进,
SOAP
很快被业界广泛应用,目前完全发布版本是
1.1
。在其发展过程中,
W3C XML
标准工作小组积极促成
SOAP
成为一个真正的开放标准。在写作此文档之时,
SOAP1.2
草案已经发布,
1.2
对
1.1
中相对混乱的部分做了改进。
SOAP
被广泛作为新一代跨平台、跨语言分布计算
Web Services
的重要部分。
Axis使用
//
包名
package
zpf;
/**
*
服务实现类的实现
* @author caoxiang
*/
public
class SSOWebservice
{
/**
登陆并得到用户信息
*/
public boolean login(String loginid, String password) {
//
判断用户是否登陆成功的标记
boolean ret = false;
if (loginid.equals("caoxiang") && password.equals("caoxiang "))
ret = true;
else
ret = false;
//
返回
return ret;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>
org.apache.axis.monitor.SOAPMonitorService
</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
</web-app>
<?xml version="1.0" encoding="gb2312"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin" />
<parameter name="enableNamespacePrefixOptimization"
value="true" />
<parameter name="attachments.Directory" value="D:/jakarta-tomcat-5.0.28/webapps/axis/WEB-INF/attachments" />
<parameter name="disablePrettyXML" value="true" />
<parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl" />
<parameter name="sendXsiTypes" value="true" />
<parameter name="sendMultiRefs" value="true" />
<parameter name="sendXMLDeclaration" value="true" />
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<!--
自定义服务开始
-->
<!--
单点登陆服务
add by Zhang.P.F -->
<service name="SSOWebservice" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className" value="zpf.SSOWebservice" />
<operation name="login" returnType="ns:boolean">
<parameter name="loginid" type="ns:String" />
<parameter name="password" type="ns:String" />
</operation>
</service>
<!--
自定义服务结束
-->
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<parameter name="qs.list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs.method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<parameter name="qs.wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
import
org.apache.axis.client.Call;
import
org.apache.axis.client.Service;
import
org.apache.axis.encoding.XMLType;
import
javax.xml.rpc.ParameterMode;
/**
*
客户端登陆类的实现
* @author caoxiang
*/
public
class CallC
{
/**
*
测试主程序
* @param args
* @throws Exception
*/
public static void main(String [] args) throws Exception {
try{
//
服务路径
String endpoint = "http://localhost:5200/axis_sample/services/SSOWebservice";
//
用户名
String user= new String("1");
//
密
码
String password=new String("2");
//
服务对象
Service service = new Service();
//
调用服务的对象
Call call = (Call) service.createCall();
//
设置目标服务
call.setTargetEndpointAddress(new java.net.URL(endpoint));
//
设置调用的方法
call.setOperationName("login");
//
设置参数
call.addParameter("loginid", XMLType.XSD_STRING, ParameterMode.IN);
//
设置参数
call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_BOOLEAN);
//
用于判断用户是否登陆的成功的标记
Boolean bv = false;
//
判断服务对象是否为空
if(call!=null) {
//
调用服务端程序,并接收服务端的返回值
bv = (Boolean)call.invoke(new Object[] {user, password});
}
//
如果登陆成功
if(bv) {
System.out.println("
用户登陆成功了
" );
} else {
System.out.println("
用户登陆失败了
" );
}
}
//
异常处理
catch(Exception e){
//
显示错误
e.printStackTrace();
}
}
}
Axis总结
Axis
做为
soap4j
的下一代开源框架,它提供了支持
java SOAP
服务器的
API,
但是
Axis
在配置文件和部署服务上都是比较繁琐的,在服务器性能方面
Axis
的性能没有用
XFire
部署的服务性能要高,但是
Axis
在发布客户端代码时比
XFire
要方便,因为
Axis
可以不需要服务端生成的接口和类便可以调用服务端程序,但是
XFire
需要服务端的程序或者服务端生成的客户端程序。虽然
Axis
没有比较全面的文档,但是
Axis
的接口还是比较简单的,可以进行简单的一次开发,对于部署,
Axis
配置文件虽然繁琐,但是都是
XML
文件的形式表达的,所以对于修改
Axis
文件还是比较简单的,之所以
Axis
的用户比
XFire
的用户要多,可能是
Axis
都是面向
XML
进行部署的,而其他的
web service
开源软件都是面向类和接口去部署,这点是
Axis
的部署和其他不同点,对于服务的兼容性
Axis
的支持性远远比其他的开源框架要多,在性能方面虽然
Axis
不足于
XFire
,但是
Axis
的性能还是比较可靠的。在兼容性方面
Axis
可以很好的和其他的
web
开发语言融合,而
XFire
只能支持有
jdk1.5
的环境,对于这点
Axis
无需
jdk1.5
的要求,所以说在这点,
Axis
领先于
XFire
。对于任何一个开发者不管你是开发
web service
还是开发
web project
,
Axis
都比较适用。
XFire和Axis的比较
XFire的优点
XFire
方便(简化
Web
服务开发),开发速度快,易于上手,配置简洁,可以和
Spring
很好的结合。
図
3
●
本地数据绑定功能。支持普通Java对象(POJO)、XMLBeans、面向XML绑定的Java架构(JAXB)和Castor等。数据绑定指定了发送至Web服务的XML请求以及返回的XML响应如何映射成Java对象。
●
使用用于XML的流式API(StAX)处理XML文档。与文档对象模型(DOM)的基于树形的方法以及用于XML的简单API(SAX)的事件驱动方法相比,StAX使用了基于拉取的机制,这不但大大加快了速度,还提高了内存的使用效率。
●
支持各种传输协议,譬如HTTP、Java消息服务(JMS)和Java虚拟机内部传输(in-JVM transport)。
●
嵌入功能,这是XFire的主要优点之一。可以把这个SOAP引擎嵌入到应用当中,完全隐藏XFire特定的所有引用,因为所有配置都是程序驱动的。
●
具有丰富的API,这样一来,非常容易定制,让开发人员可以在需要时,在不同阶段截获请求,并且进行处理。
●
符合诸多最新标准,譬如SOAP 1.1(没有编码的远程过程调用即RPC)和1.2、WSDL 1.1、Web服务互操作性组织的Basic Profile 1.0、Web服务寻址规范和Web服务安全标准。
●
性能和局限,Web服务使用许多资源,但它们的性能并不高。XFire打破了这个传统。与同类的SOAP引擎相比,XFire使用的内存大大减少(一方面是由于使用StAX),而性能却大大提高。另外,XFire还提供了进一步优化性能的几种方法。方法之一就是使用Java虚拟机内部传输。如果知道Web服务与客户程序在同一个Java虚拟机里面运行,就可以选择使用本地传输,这样可以高速传输服务。
● XFire
支持web service standards,Spring整合,支持JBI,AXB 和XMLBeans.
XFire的缺点
●
缺少支持附件的功能,不过将来的版本一定能支持该功能。
●
缺少简单易懂的用户指南,XFire开发队伍在这方面有许多工作要做。
Axis的优点
●
Axis
应用了管道和过滤器模式
.Aixs
是
apache
开源的
webservice
实现服务器。简单的说,
axis
就是处理
Message
,它首先截获客户端的请求,然后转发到真正的实现业务逻辑上处理客户端的请求,在这之前经过一系列的
handler
处理
.
它的结构很像
EJB
容器
.
其实就是管道和过滤器模式的应用,
Handler
就是过滤器
.
它的处理顺序主要考虑两个方面一个是部署描述符
(deployment configuration )
另一个就是是客户端还是服务器端。
Handler
处理的对象是
MessageContext
它的由
3
个重要的部分组成,一是一个
request Message
,一个是
response message
,还有许多属性。经研究源码分析,在服务器端,有一个
Transport Listener
它监听客户端的请求,
可以通过多种协议,一旦有客户请求,它将按照协议的规范把数据解析生成生成一个
Message
对象,然后把它设置到
MessageContext
,然后调用一系列的
Handler
进行处理。
其结构图如下
:
|
●
支持附件的功能
Axis的缺点
●
开发过程比较繁琐,配置比较复杂,部署服务器比较麻烦。
●
缺少简单易懂的用户指南,Axis开发队伍在这方面有许多工作要做。
●
性能不够优越。
CXF篇
CXF简介
作为继承
Celtix
以及
XFire
两大开源项目的精华,
CXF
提供
JAX-WS
的全面支持,并且提供了多种
Binding
以及
Transport
的支持,可以采用
WSDL first
或者
Code first
轻松实现
WebService
的发布和使用。
CXF
是一个
JAX-WS API
的实现。
CXF 支持多种 binding , transport 。
CXF 支持也支持除 JAX-WS 之外的服务模型,例如 JBI , CORBA , SCA 等。
CXF 支持多种 binding , transport 。
CXF 支持也支持除 JAX-WS 之外的服务模型,例如 JBI , CORBA , SCA 等。
CXF
采用
CodeFirst
的服务发布方式。
CXF使用
public
interface HelloImpl {
public String sayHello() {
return "hello";
}
}
public String sayHello() {
return "hello";
}
}
public
interface Hello {
String sayHello();
}
String sayHello();
}
import org.apache.cxf.frontend.ServerFactoryBean;
// Create our service implementation
HelloWorldImpl helloWorldImpl = new HelloWorldImpl();
// Create our Server
// Create our service implementation
HelloWorldImpl helloWorldImpl = new HelloWorldImpl();
// Create our Server
ServerFactoryBean svrFactory = new ServerFactoryBean();
svrFactory.setServiceClass(Hello.class);
svrFactory.setAddress("http://localhost:8080/Hello") ;
svrFactory.setServiceBean(helloWorldImpl);
svrFactory.create();
svrFactory.setServiceClass(Hello.class);
svrFactory.setAddress("http://localhost:8080/Hello") ;
svrFactory.setServiceBean(helloWorldImpl);
svrFactory.create();
服务安全性
数字证书
Ø
相当于身份证件,数字证书是在
IE
中做为一种身份标识的。
Ø
由于
Internet
网电子商务系统技术使在网上购物的顾客能够极其方便轻松地获得商家和企业的信息
,
但同时也增加了对某些敏感或有价值的数据被滥用的风险
.
为了保证互联网上电子交易及支付的安全性
,
保密性等,防范交易及支付过程中的欺诈行为,必须在网上建立一种信任机制。这就要求参加电子商务的买方和卖方都必须拥有合法的身份,并且在网上能够有效无误的被进行验证。数字证书是一种权威性的电子文档。它提供了一种在
Internet
上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构
----CA
证书授权
(Certificate Authority)
中心发行的,人们可以在互联网交往中用它来识别对方的身份。当然在数字证书认证的过程中,证书认证中心(
CA
)作为权威的、公正的、可信赖的第三方,其作用是至关重要的。
Ø
数字证书也必须具有唯一性和可靠性。为了达到这一目的,需要采用很多技术来实现。通常,数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所有的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。公开密钥技术解决了密钥发布的管理问题,用户可以公开其公开密钥,而保留其私有密钥。
Ø
数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。
Ø
目前的数字证书类型主要包括:个人数字证书、单位数字证书、单位员工数字证书、服务器证书、
VPN
证书、
WAP
证书、代码签名证书和表单签名证书。
Ø
随着
Internet
的普及、各种电子商务活动和电子政务活动的飞速发展,数字证书开始广泛地应用到各个领域之中,目前主要包括:发送安全电子邮件、访问安全站点、网上招标投标、网上签约、网上订购、安全网上公文传送、网上缴费、网上缴税、网上炒股、网上购物和网上报关等。
数字签名
相当于在现实社会中给文件签名那种。
简单地说
,
所谓数字签名就是附加在数据单元上的一些数据
,
或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据
,
防止被人
(
例如接收者
)
进行伪造。它是对电子形式的消息进行签名的一种方法
,
一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名
,
目前主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有
RSA
、
ElGamal
、
Fiat-Shamir
、
Guillou- Quisquarter
、
Schnorr
、
Ong-Schnorr-Shamir
数字签名算法、
Des/DSA,
椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等
,
它与具体应用环境密切相关。显然
,
数字签名的应用涉及到法律问题
,
美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准
(DSS)
。一些国家如法国和德国已经制定了数字签名法。