`
han_zw
  • 浏览: 174404 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

基于HTTPS的webservice 的环境搭建step by step

阅读更多

前段时间接触webservice,需要建立基于ssl的webservice以保证安全性,并要提供数字的支持。关于这部分以前没有搞过,经过摸索总算有些收获。现在把我的一些经验share一下。

一、 数字证书的相关准备
关于数字证书部分我是用openssl做的,也是个开源的软件,前不久刚刚发布了1.0版本(做了11年才正式发布,由衷的佩服,老外真是有股哏劲)。网上很多文章介绍用java自带的keytool命令完成,我没有试过,不过看文章介绍好像keytool没有CA认证的功能。下面开始数字证书相关操作。


1. 下载、安装openssl(好像是废话)
Openssl建议大家用1.0版本,毕竟是正式版本。我用的时候正式版还没出来,当时用的是OpenSSL 0.9.8m,不要用OpenSSL 0.9.8h这个版本(有个bug,会影响到后面的操作)。安装后从命令行进入安装目录下的bin目录。Ready! GO!。


2.创建CA的私钥
执行以下命令openssl genrsa -des3 -out ../demo/ca/ca.key 1024
demo是我的工作目录,接下来会提示你输入密码,后面用到的密码会很多,最好都认真记下来。


3.创建CA证书
openssl req -new -x509 -key ../demo/ca/ca.key -out ../demo/ca/ca.crt -days 365
x509是一种加密的标准,-out是指输出的文件路径,-key是指定私钥,也就是上一步生成的那个,-days是指证书有效期。
注:再输入common name时你可以指定你自己的名字,但是不能输入你的服务器名(www.XX.X.com)


4.创建server端的私钥
因为咱们是要在server端提供SSL的webservice,所以在server端需要使用私钥库和信任库。
openssl genrsa -des3 -out ../demo/server/server.key 1024

 

5.创建server证书签名请求
我们可以发送签名请求到一个官方的CA机构,这些机构都是要收费的,而且还要严格审核,至于我们自己开发过程中的话实在是没必要。我们直接发送到我们刚才通过openssl构建的CA就可以了。
openssl req -new -key ../demo/server/server.key -out ../demo/server/server.csr
注意这里的common name,此处填写你的服务器的ip或者域名,例如localhost,也就是你要为哪台服务器做证书就指定那台机器。

 

6.CA签署server证书
如果是第一次通过CA签署证书的话,执行如下命令
openssl x509 -req -days 30 -in ../demo/server/server.csr -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAcreateserial -out ../demo/server/server.crt
其中的-CAcreateserial是指创建一个新的序列文件。这样openssl会在当前目录下创建一个名为ca.srl的文件存储序列号(官方是这样说的,我本地产生的序列文件是.srl,搞不清怎么回事,可能是创建时没指定名字吧,不过不影响后面的操作)。下次再次签署证书时就可以直接指定这个序列文件了。命令如下:openssl x509 -req -days 30 -in ../demo/server/server.csr -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAserial .srl -out ../demo/server/server.crt
输入CA私钥的密码后签署成功。

 

7.创建server端的pkcs12文件
openssl pkcs12 -export -in ../demo/server/server.crt -inkey ../demo/server/server.key -out ../demo/server/server.p12 -name demo_server
注意其中的-name demo_server,这个是指定keystore的别名,记下来,很重要哦(weblogic要用到,网上的资料都没有这个参数,害得我weblogic配置时费老了劲了)。

 

8.转换pkcs12为JKS keystore文件
这个过程需要用到jetty.jar,下载相应jar后添加到classpath,然后执行如下命令
java org.mortbay.util.PKCS12Import ../demo/server/server.p12 ../demo/server/server.jks
在此处输入上一步设置到export password。

Server端相关文件就完成了,现在可以用java的keytool命令查看一下生成的server.jks的内容
keytool -v -list -keystore ../demo/server/server.jks
接下来开始准备client端的相关文件,因为我们启用了数字证书的机制,client在通过webservice访问server时也需要提供自己的证书,也就是server和client相互认证(客户要求的,唉)。客户端的相关操作与server端类似,不做过多说明。

 

9.创建client端的私钥
openssl req -new -newkey rsa:1024 -nodes  -out ../demo/client/client.req -keyout ../demo/client/client.key

 

10.创建client端证书签名请求
openssl x509 -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAserial .srl -req -in ../demo/client/client.req -out ../demo/client/client.pem -days 365

 

11.创建client端的pkcs12文件
openssl pkcs12 -export -clcerts -in ../demo/client/client.pem -inkey ../demo/client/client.key -out ../demo/client/client.p12 -name

 

12.创建client端的jks文件
java org.mortbay.util.PKCS12Import ../demo/client/client.p12 ../demo/client/client.jks

 

13.创建信任密钥库
这次用到java的keytool命令
keytool -genkey -alias dummy -keyalg RSA -keystore ../demo/server/truststore.jks
到此为止数字证书的部分就完成了,下面介绍一下tomcat如何配置ssl支持。

 

14.将CA认证过的证书导入信任库

keytool -import -v -trustcacerts -alias my_ca -file ../demo/ca/ca.crt -keystore ../demo/server/truststore.jks

通过下面的命令可以查看信任库的详细信息

keytool -v -list -keystore ../demo/server/truststore.jks


二、 tomcat ssl支持的配置

1. 在tomcat的server.xml中添加一个新的connector,配置如下
<Connector  port="8443" maxHttpHeaderSize="8192" 
SSLEnabled="true"
         maxThreads="150" 
         minSpareThreads="25" 
         maxSpareThreads="75" 
         enableLookups="false" 
         disableUploadTimeout="true" 
         acceptCount="100" 
         scheme="https" 
         secure="true" 
         clientAuth="false" 
         sslProtocol="TLS" 
         keystoreFile="/conf/server.jks" 
         keystorePass="XXXXXX" 
         algorithm="SunX509" 
     /> 
注:keystoreFile对应server端的jks文件,keystorePass对应其密码

2. 重启tomcat,在浏览器中敲入https://localhost:8443/测试一下
通过https访问web功能时需要在浏览器中导入证书,因为我们主要解决webservice的ssl,关于浏览器如何导证书就不做介绍了。
Tomcat的配置就这么简单。

三、 weblogic9.2 ssl配置
weblogic通过控制台就可以完成ssl的配置,以下是部分截图
1. 登录weblogic控制台 ,点击页面左端所属域下的:环境&gt;&gt;服务器&gt;&gt; 点击所属服务器进行编辑,在常规选项卡中作如下配置,如图(注意红色区域):
[img]/admin/blogs/7.jpg&quot; alt=&quot;图7[/img]

 

2. 切换到私钥库选项卡
[img]/admin/blogs/8.jpg&quot; alt=&quot;图8[/img]
注:1.密钥库选择“自定义标识和自定义信任”
      2.密钥库的位置可以用绝对路径也可以用相对路径
      3.密码就是我们在数字证书部分的密码


3. 切换到SSL选项卡

[img]/admin/blogs/9.jpg&quot; alt=&quot;图9[/img]

注意那个私钥别名,就是我们在数字证书部分指定的server私钥的那个别名

好了,保存设置后重启就可以了。访问https://localhost:7002/试一下吧。

终于写完了,以前老是在javaeye中看别人的文章,还老挑毛病,今天第一次写博客,没想到这么累啊,实在是不会贴图,搞了半天都不行,还是直接传附件吧!

这次算是投石问路吧,好的话下周再写一下利用cxf建立SSL的webservice(数字证书以及鉴权机制)。

  • 大小: 23.3 KB
  • 大小: 13.1 KB
  • 大小: 18.3 KB
6
0
分享到:
评论
6 楼 929奋斗ing 2013-10-30  
我在调用别人的https的接口,证书实在浏览器下出来的,keystore是用keytool生成的,但是在用wsdl地址生成客户端的时候,生成不了,把wsdl文件另存为xml文件后可以用xml生成,但是在java代码中调用webservice时候一直报错,求大神跟我说说https的和http的调用时候有哪些不同???还有就是我用上边的方法生成客户端,这样对不对?求大神~~~~~谢谢!!!
5 楼 472425328 2013-07-12  
我最近在做这个cxf +spring + mybatis的restful webservice,请问这个的安全认证该怎么做啊?
4 楼 chwnchwn 2013-05-10  
测试可以用  但是有疑问 
问题
1.client.jks是做什么用的为什么我在Java调用的时候
System.setProperty("javax.net.ssl.keyStore", "client.jks"); 
System.setProperty("javax.net.ssl.keyStore", "server.jks"); 
都可以 

2.在提供给第三方调用的时候,正确的是应该提供几个文件给第三方,ca.crt、client.p12、client.jks、truststore.jks 是这几个吗 可以解释下原理吗

3. 如果第三方不是java那需要提供哪些证书或如果才能调用成功
3 楼 han_zw 2013-01-30  
二楼的问题可以参考我之前的文章: 基于CXF的webservice的鉴权
http://han-zw.iteye.com/blog/646451,
希望能对你有帮助
2 楼 pxy1510742 2012-12-14  
最近正好项目需要用到ssl,看了楼主的文章后明白了很多。但是还是有些问题不懂,望楼主指点一下,先谢谢了。我的情况是这样的:我有一个client,里面是action,action调用webservice的方法,那么这个action和webservice怎样实现SSL双向认证,主要是action这段怎么解决。
1 楼 garyshang 2012-08-08  
很详细,很强大

相关推荐

    使用cxf和spring开发基于https的webservice服务端以及客户端样例

    首先,我们需要配置HTTPS环境。HTTPS是HTTP协议的安全版本,通过SSL/TLS协议提供数据加密、服务器身份验证和消息完整性检查。在Java中,这通常涉及到生成自签名证书或使用权威CA颁发的证书,并配置在Java密钥库...

    java 调用https webservice实例及axis包

    3. **配置HTTPS**:在生成的客户端代码中,可能需要配置HTTPS相关的属性,如信任的证书或密钥库。这通常涉及到`javax.net.ssl.HttpsURLConnection`类的设置,例如设置`SSLSocketFactory`,处理证书问题。 4. **调用...

    基于Webservice的信息查询系统

    "基于Webservice的信息查询系统" Webservice是一种基于Web的服务架构,允许不同的应用程序之间进行交互和集成。它可以实现跨越不同平台、语言和环境的系统集成,实现业务流程的自动化和优化。基于Webservice的信息...

    WebService环境搭建.doc编程资料

    WebService环境搭建.doc

    webservice服务器的搭建

    本文档详细的介绍了webservice服务器端搭建的详细步骤,及其原理,适合初学者使用

    https连接webservice

    - 针对使用Axis2框架的WebService,需要配置axis2.xml文件,设置相关的安全参数。 - **添加客户端代码**: - 编写客户端代码,调用HTTPS方式访问的WebService。 6. **JKS格式证书部署**: - 导出客户端公钥...

    springboot+webservice搭建webservice服务端

    在IT行业中,Web Service是一种基于XML的通信标准,允许不同系统之间进行互操作性交互。Spring Boot是一个流行的Java框架,用于简化Spring应用的创建和管理。本教程将讲解如何使用Spring Boot来搭建一个Web Service...

    Java中如何通过https调用Webservice接口_测试环境.rar

    首先,我们需要理解HTTPS的核心特性:它基于HTTP协议,但在数据传输层增加了SSL/TLS协议,提供了加密处理、服务器身份验证和消息完整性检查,以防止中间人攻击。 1. **配置信任的CA证书** 在调用HTTPS服务时,Java...

    WebService+CXF环境配置

    WebService环境配置 CXF环境搭建

    基于.net环境的WebService开发资料

    在.NET环境中,WebService是一种通过HTTP...综上所述,基于.NET环境的WebService开发资料涵盖了从创建、调用到管理WebService的全过程,结合源码学习,有助于开发者深入理解.NET平台下WebService的实现机制和最佳实践。

    webService服务搭建详解

    ### WebService服务搭建详解 在本篇文章中,我们将详细介绍如何使用Apache Axis2来搭建WebService服务。Axis2是一款功能强大、灵活且高效的WebService框架,广泛应用于Java应用中的远程服务调用场景。本文旨在帮助...

    使用php搭建webService服务器(代码实例)

    使用 PHP 搭建 WebService 服务器 在本文中,我们将讨论如何使用 PHP 搭建 WebService 服务器,并详细介绍 WSDL 概念网络服务描述语言的基本结构和元素。 WSDL 概念 WSDL(Web Service Description Language)是...

    spring+CXF实现WebService(http+https)

    本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **Spring与CXF结合**: Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种...

    基于jersey搭建webservice框架

    【基于Jersey搭建WebService框架】 在Java开发中,构建RESTful Web服务时,Jersey是一个常用的框架。它作为Java EE的一部分,提供了实现 Representational State Transfer (REST) 架构风格的工具集。本教程将围绕...

    基于cfx的webservice接口搭建

    自行构建web服务服务提供方和使用方,学习基于cfx的webservice服务调用原理

    基于Webservice的数据访问.docx

    基于 Webservice 的数据访问技术 Webservice 工作原理 Webservice 是一种基于网络的远程过程调用(RPC)技术,允许不同的应用程序之间通过网络进行通讯和交互。Webservice 工作原理可以分为两种:通过 Socket 实现...

    基于CFX开发WebService

    总结来说,基于CXF开发WebService涉及了服务器配置、接口定义、接口实现以及服务部署等环节。通过这种方式,可以利用CXF的强大功能快速地构建和发布高质量的Web服务。对于那些从基于WebWork框架转向Struts2的开发...

    调用https协议的webservice,以及证书手动加载

    调用https协议的webservice,以及证书手动加载。

Global site tag (gtag.js) - Google Analytics