我方系统与另一个系统对接,需要走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
分享到:
相关推荐
2. **配置服务客户端**:通过CXF的客户端API,你可以设置服务地址、认证信息等参数。这通常在Spring配置文件或代码中完成。 3. **调用服务**:一旦客户端准备好,就可以通过CXF客户端API来调用服务方法,传递必要的...
在这个场景中,我们关注的是如何使用Apache CXF框架来调用由Axis2提供的接口服务。Apache CXF和Axis2都是流行的开放源码服务框架,它们各自在Web服务领域有着广泛的应用。 Apache CXF是一个强大的服务框架,它允许...
在本文中,我们将深入探讨如何使用Apache CXF V3.2.4实现带有安全认证的Web服务调用。Apache CXF是一个开源框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful API。CXF 3.2版本引入了许多增强功能,包括...
本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...
- `clientAuth`:表示是否要求客户端认证。 - `sslProtocol`:指定使用的 SSL/TLS 版本。 - `keystoreFile` 和 `keystorePass`:分别是密钥库文件路径和密码。 ### 步骤三:配置 Spring 配置文件 最后一步是在 ...
【标题】"cxf https webservice"涉及到的关键技术点主要集中在Apache CXF框架与HTTPS安全协议上,以及如何使用CXF调用通过HTTPS协议提供的Web服务接口。Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种...
用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口
本篇将深入探讨如何将Spring与CXF整合,以实现高效地调用Web Services。 1. **Spring框架**:Spring以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,提供了一...
java CXF客户端请求ERP SAP webservice通过用户名和密码验证功能!
本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **Spring与CXF结合**: Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种...
本教程将详细讲解如何使用Apache CXF框架在Java环境中调用C#编写的Web服务。 **CXF简介** Apache CXF是一个开源的Java框架,用于构建和服务导向架构(SOA)。它支持多种Web服务标准,如SOAP、RESTful API等,同时也...
在这个基于CXF的Web服务完整例子中,我们将深入探讨CXF的核心概念、配置、以及如何创建和调用Web服务。 1. **CXF框架介绍**:CXF,全称为"Code first eXtended Framework",最初由XFire项目发展而来,后与Apache ...
CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...
C#动态调用CXF WEBSERVICE框架共通类。
当我们需要在客户端调用Web服务时,CXF扮演着关键角色。本篇将详细讲解如何利用CXF客户端来调用Web服务以及所需的jar包。 首先,让我们了解CXF的基本概念。CXF是一个用于构建和服务导向架构(SOA)应用程序的开源...
- 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...
3. 配置Spring Security以实现认证。 4. 使用CXF生成客户端代码。 5. 在客户端应用中创建代理对象并调用服务。 通过这种方式,你可以构建安全、可靠的Web服务,并在Spring Boot环境中轻松地进行客户端调用。
在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行。这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core...
为了设置安全认证,我们需要配置 CXF 的 Spring 容器,添加相关的拦截器或过滤器,比如 `org.apache.cxf.security.authentication.BasicAuthenticationInInterceptor` 或 `org.apache.cxf.security.transport....