`

HTTPS双向认证及cxf调用

阅读更多
我方系统与另一个系统对接,需要走https协议。研究了几天,还是一知半解的,不过最终还是满足需求,在这里记录一下

背景:

我方系统开放了web service供对方调用,对方系统也提供了web service给我方调用。对方要求通过https双向认证,我方只要求单向认证即可

因为我们这边拿不到客户系统,所以我搭建了一个模拟桩,用来模拟接口交互和https互通

方法:

1、生成我方系统的keystore,并配置我方系统的https

模拟桩搭建在某台机器上,比如ip地址是1.2.3.4,用以下命令:

keytool -genkey -alias remedy -keyalg RSA -keystore remedy.keystore -validity 3650

这样会生成一个remedy.keystore文件

同理,我方系统部署在另一台机器上,比如ip地址是1.2.3.5,用以下命令:

keytool -genkey -alias wfm -keyalg RSA -keystore wfm.keystore -validity 3650

这样会生成一个wfm.keystore文件

因为我方系统只需要单向认证,所以有这个wfm.keystore就可以了。首先将wfm.keystore放到%JBOSS_HOME%/server/default/conf/目录下,然后修改%JBOSS_HOME%/server/default/deploy/jboss-web.deployer/目录下的server.xml文件
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/wfm.keystore" keystorePass="changeit" keystoreType="jks" />

完成了这步之后,我方系统的https就配置好了,因为我方系统只要求单向认证,比较简单

2、从keystore导出双方的证书,并交换,配置模拟桩的https

然后需要把刚才生成的2个keystore导出为证书,进行交换,用以下命令:

keytool -export -alias wfm -file wfm.cer -keystore wfm.keystore

将wfm.keystore导出为wfm.cer

同理,remedy.keystore也需要导出

keytool -export -alias remedy -file remedy.cer -keystore remedy_dummy.keystore

得到remedy.cer

由于模拟桩是需要双向认证的,所以要将wfm.cer提供给模拟桩,然后用以下命令导入为truststore

keytool -import -alias wfm -file wfm.cer -keystore client.keystore

这样会得到一个client.keystore,其中包含了wfm的证书信息,可以用以下命令查看:

keytool -list -v -keystore client.keystore

这时候,模拟桩已经有了一个自己的keystore,即remedy.keystore,以及一个客户端的truststore,即client.keystore,接下来需要在模拟桩的jboss里配置https

首先将remedy.keystore和client.keystore放到%JBOSS_HOME%/server/default/conf/目录下

然后修改%JBOSS_HOME%/server/default/deploy/jboss-web.deployer/目录下的server.xml文件
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS" keystoreFile="conf/remedy.keystore" 
               keystorePass="changeit" keystoreType="jks" truststoreFile="conf/client.keystore" truststorePass="changeit" truststoreType="jks" />

完成这步之后,模拟桩的https就也配置好了

经过上述2步,我方系统的https已经配置完毕,得到wfm.cer的客户端,只要将wfm.cer导入到truststore,就可以调用我方系统了

模拟桩的https也已经配置完毕了,但是现在我方系统还调用不了模拟桩,因为模拟桩是要求双向认证的

3、将模拟桩的证书导入到我方系统的truststore

还是用以下命令:

keytool -import -alias remedy -file remedy.cer -keystore remedy.keystore

得到了remedy.keystore,可以将它作为truststore

完成这步之后,双方的https都配置好了,也已经互换了证书,接下来可以进行客户端编程

首先把已经准备好的wfm.keystore(在jboss的%JBOSS_HOME%/server/default/conf/目录下已经有一份,作为keystore),以及remedy.keystore(刚刚生成的,作为truststore),放到某个目录中,然后在cxf配置文件中配置
<http:conduit name="*.http-conduit">

		<http:tlsClientParameters disableCNCheck="true"
			secureSocketProtocol="SSL">

			<!-- 对方的证书 -->
			<sec:trustManagers>
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/inoc/wfm/certificates/remedy.keystore" />
			</sec:trustManagers>

			<!-- 己方的证书 -->
			<sec:keyManagers keyPassword="changeit">
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/inoc/wfm/certificates/wfm.keystore" />
			</sec:keyManagers>

			<sec:cipherSuitesFilter>
				<sec:include>.*_EXPORT_.*</sec:include>
				<sec:include>.*_EXPORT1024_.*</sec:include>
				<sec:include>.*_WITH_DES_.*</sec:include>
				<sec:include>.*_WITH_NULL_.*</sec:include>
				<sec:exclude>.*_DH_anon_.*</sec:exclude>
			</sec:cipherSuitesFilter>

		</http:tlsClientParameters>

	</http:conduit>

测试调用一下,就可以了

总结一下:

1、服务端的配置

如果是配置单向认证的https,只需要在jboss中放置自己的keystore,然后配置文件中的clientAuth设置为false

如果是配置双向认证的https,则除了自己的keystore之外,还需要放置truststore,truststore是根据对方提供的证书导入的。然后配置文件中的clientAuth需要设置为true

2、keytool命令

keytool -genkey 是生成自己的keystore
keytool -export 是从keystore导出证书
keytool -import 是将证书导入到truststore

3、关于keystore和truststore

无论是在jboss中的配置,还是cxf中的配置,只需要记住:

keystore是配置自己的.keystore
truststore是配置对方的.keystore
分享到:
评论
1 楼 hollowmanc 2014-10-14  
感谢你回复我的留言,这几天都看蒙了,帖子是http://kyfxbl.iteye.com/blog/1499668
问题是:你最后给的xml代码,配置在那个xml里?是cxf.xml吗,还是新建一个xml,用这种<import resource="classpath:META-INF/cxf/cxf.xml" />导入进去?
我这里目前的情况是都在程序里写,调用对方的证书,但是自己的证书不知道怎么发布,现在用的cxf发布代码都不自己写,都是<simple:server id="xxx"
serviceClass="xxx.xx" address="/OP_SI_Auditing_IB">
<simple:serviceBean>
<ref bean="xxxxx" />
</simple:serviceBean>
</simple:server>
然后系统直接发布了,都是http的,但是怎么发布https格式的啊,web服务器是websphere,求大神指点

相关推荐

    使用CXF和camel-cxf调用webservice

    2. **配置服务客户端**:通过CXF的客户端API,你可以设置服务地址、认证信息等参数。这通常在Spring配置文件或代码中完成。 3. **调用服务**:一旦客户端准备好,就可以通过CXF客户端API来调用服务方法,传递必要的...

    myService_purpose1sv_cxf调用axis2的接口服务_接口服务_

    在这个场景中,我们关注的是如何使用Apache CXF框架来调用由Axis2提供的接口服务。Apache CXF和Axis2都是流行的开放源码服务框架,它们各自在Web服务领域有着广泛的应用。 Apache CXF是一个强大的服务框架,它允许...

    CXF V3.2.4 实现的WebService调用(带安全认证)

    在本文中,我们将深入探讨如何使用Apache CXF V3.2.4实现带有安全认证的Web服务调用。Apache CXF是一个开源框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful API。CXF 3.2版本引入了许多增强功能,包括...

    cxf客户端调用axis服务端流程

    本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...

    cxf https webservice

    【标题】"cxf https webservice"涉及到的关键技术点主要集中在Apache CXF框架与HTTPS安全协议上,以及如何使用CXF调用通过HTTPS协议提供的Web服务接口。Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种...

    camel-cxf调用和发布webservice例子

    用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口

    Spring集成Cxf调用WebServices

    本篇将深入探讨如何将Spring与CXF整合,以实现高效地调用Web Services。 1. **Spring框架**:Spring以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,提供了一...

    CXF实现SSL安全验证

    - `clientAuth`:表示是否要求客户端认证。 - `sslProtocol`:指定使用的 SSL/TLS 版本。 - `keystoreFile` 和 `keystorePass`:分别是密钥库文件路径和密码。 ### 步骤三:配置 Spring 配置文件 最后一步是在 ...

    CXF 调用ASP服务器端通过用户名密码验证

    java CXF客户端请求ERP SAP webservice通过用户名和密码验证功能!

    spring+CXF实现WebService(http+https)

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

    cxf调用c#的webservice

    本教程将详细讲解如何使用Apache CXF框架在Java环境中调用C#编写的Web服务。 **CXF简介** Apache CXF是一个开源的Java框架,用于构建和服务导向架构(SOA)。它支持多种Web服务标准,如SOAP、RESTful API等,同时也...

    webService(基于cxf)的完整例子

    在这个基于CXF的Web服务完整例子中,我们将深入探讨CXF的核心概念、配置、以及如何创建和调用Web服务。 1. **CXF框架介绍**:CXF,全称为"Code first eXtended Framework",最初由XFire项目发展而来,后与Apache ...

    CXF客户端调用例子

    CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...

    C#动态调用CXF WEBSERVICE框架的共通类

    C#动态调用CXF WEBSERVICE框架共通类。

    cxf客户端调用webservice所需jar包

    当我们需要在客户端调用Web服务时,CXF扮演着关键角色。本篇将详细讲解如何利用CXF客户端来调用Web服务以及所需的jar包。 首先,让我们了解CXF的基本概念。CXF是一个用于构建和服务导向架构(SOA)应用程序的开源...

    springboot整合CXF发布webservice和客户端调用

    - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    3. 配置Spring Security以实现认证。 4. 使用CXF生成客户端代码。 5. 在客户端应用中创建代理对象并调用服务。 通过这种方式,你可以构建安全、可靠的Web服务,并在Spring Boot环境中轻松地进行客户端调用。

    webservice的cxf框架客户端调用所需jar包

    在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行。这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core...

    cxf入门例子(安全认证)

    为了设置安全认证,我们需要配置 CXF 的 Spring 容器,添加相关的拦截器或过滤器,比如 `org.apache.cxf.security.authentication.BasicAuthenticationInInterceptor` 或 `org.apache.cxf.security.transport....

Global site tag (gtag.js) - Google Analytics