cxf的https认证可以分为https单向认证和https双向认证。
https单向认证
服务端
1.制作相关的服务端证书相关命令
//创建私钥
openssl genrsa -out root/server/temip-key.pem 1024
创建证书请求
openssl req -new -out root/server/temip-req.csr -key root/server/temip-key.pem -subj /C=CN/ST=GuangDong/L=ShenZhen/O="ShanCao Technologies Co. Ltd."/OU="ShanCao EOMS System Team"/OU="Copyright (c) 1998-2018 ShanCao Technologies Co. Ltd."/CN=localhost/emailAddress=liuwuhen@huawei.com
注意cn如果是本机应该填写localhost,如果是网站则填写域名.
/签署服务器端证书
openssl x509 -req -in root/server/temip-req.csr -out root/server/temip-cert.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
//将服务器端证书PKCS12格式
openssl pkcs12 -export -clcerts -in root/server/temip-cert.pem -inkey root/server/temip-key.pem -out root/server/temip-id.p12
通过上述几步之后服务端的证书已经制作完成。
2.在服务端添加https配置,我们只需要在tomcat中的server.xml文件中添加相关的https配置即可,详细的内容如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/temip-id.p12"
keystoreType="PKCS12" keystorePass="123456"/>
相关参数说明:
其中clientAuth为true代表双向认证,false表示单向认证,want表示服务端可以验证客户端,也可以不需要验证客户端。
3.运行mvn clean install -Ptomcat 通过访问https://localhost:8443/cxf-test/services/sayHello?wsdl 可以得到
正确的wsdl文件内容,即说明服务端的配置https已经成功。
客户端
客户端可以采用两种方式来完成https单向认证。
A.我们可以将生成的证书文件信息,导入到我们的jre中的证书库中。
如果才用这种方式,那么需要将证书的格式转换成cer,采用命令如下:
keytool -import -v -trustcacerts -storepass changeit -alias temip -file root/server/temip-cert.pem -keystore root/server/temip-id.jks
keytool -export -alias temip -keystore root/server/temip-id.jks -file root/server/temip-id.cer -storepass changeit
将temip.cer证书导入到jre证书库的命令如下:
keytool -import -v -trustcacerts -storepass changeit -alias cz -file root\server\temip-id.cer -keystore
D:\\jdk\\jre\\lib\\security\\cacerts
运行其客户端代码,即可输出say hello.
如果需要删除导入证书,可以采用keytool delete具体如下:
keytool -delete -alias sz -keystore D:\\jdk\\jre\\lib\\security\\cacerts -storepass changeit
查询可以采用keytool -list
keytool -list -v -keystore root\server\temip-id.p12 -storetype pkcs12 -storepass changeit
B.通过代码实现cxfhttps的单项认证
1.将服务端生成的temip-id.cer证书导出,生成客户端keystore其命令如下:
keytool -import -alias wuhen -trustcacerts -file root/server/temip-id.cer -storepass changeit -keystore client.keystore
2.编写工具代码
public static TrustManager[] getTrustManagers() {
// 读取证书仓库输入流
InputStream is = null;
try {
// 信任仓库的默认算法X509
String alg = TrustManagerFactory.getDefaultAlgorithm();
// 获取信任仓库工厂
TrustManagerFactory factory = TrustManagerFactory.getInstance(alg);
// 读取信任仓库
is = new FileInputStream(new File("F:\\client.keystore"));
// 密钥类型
KeyStore ks = KeyStore.getInstance("JKS");
// 加载密钥
ks.load(is, "123456".toCharArray());
factory.init(ks);
TrustManager[] tms = factory.getTrustManagers();
return tms;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
3.编写客户端测试代码
public static void main(String[] args)
{
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
// 注册WebService接口
factory.setServiceClass(IHelloWorld.class);
// webservice请求地址
String wsdlAdder = "https://localhost:8443/cxf-test/services/sayHello";
// 发布接口
factory.setAddress(wsdlAdder);
IHelloWorld helloWorld = (IHelloWorld) factory.create();
Client proxy = ClientProxy.getClient(helloWorld);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
TLSClientParameters tlsParams = conduit.getTlsClientParameters();
if (tlsParams == null) {
tlsParams = new TLSClientParameters();
}
tlsParams.setSecureSocketProtocol("SSL");
// 设置客户端证书
tlsParams.setTrustManagers(WebServiceUtils.getTrustManagers());
conduit.setTlsClientParameters(tlsParams);
}
运行客户端测试代码即可输出say hello.
相关推荐
**双向SSL**,也称为客户端和服务器之间的双向认证,比单向SSL更安全。在双向SSL中,不仅服务器验证客户端,客户端也要验证服务器的身份,同时服务器也会验证客户端的身份。这需要客户端和服务器各自拥有并提供有效...
Apache CXF 安全认证主要涉及两种机制:基于密码的安全认证和基于CA证书的安全认证。 首先,基于密码的安全认证方法需要在客户端和服务端配置相应的拦截器以实现用户验证。客户端配置包括使用`WSS4JOutInterceptor`...
- `clientAuth`:表示是否要求客户端认证。 - `sslProtocol`:指定使用的 SSL/TLS 版本。 - `keystoreFile` 和 `keystorePass`:分别是密钥库文件路径和密码。 ### 步骤三:配置 Spring 配置文件 最后一步是在 ...
为了设置安全认证,我们需要配置 CXF 的 Spring 容器,添加相关的拦截器或过滤器,比如 `org.apache.cxf.security.authentication.BasicAuthenticationInInterceptor` 或 `org.apache.cxf.security.transport....
【标题】"cxf https webservice"涉及到的关键技术点主要集中在Apache CXF框架与HTTPS安全协议上,以及如何使用CXF调用通过HTTPS协议提供的Web服务接口。Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种...
在IT行业中,集成Spring 5.0、CXF 3.2和Maven构建Web服务是常见的实践。这里我们将深入探讨这些技术以及如何将它们整合在一起实现HTTPS支持。 首先,让我们了解一下每个组件: 1. **Spring 5.0**:Spring框架是...
在本文中,我们将深入探讨如何使用Apache CXF V3.2.4实现带有安全认证的Web服务调用。Apache CXF是一个开源框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful API。CXF 3.2版本引入了许多增强功能,包括...
本示例将详细介绍如何使用Apache CXF和Spring框架来开发基于HTTPS的安全Web服务,包括服务端和客户端的实现。 Apache CXF是一个开源的Java框架,它支持创建和消费各种Web服务,包括SOAP和RESTful API。而Spring框架...
本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **Spring与CXF结合**: Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种...
同时,`org.apache.cxf.interceptor.security.BasicAuthInterceptor`拦截器处理了实际的身份验证过程,它会检查收到的请求是否包含正确的认证信息。 工具方面,CXF提供了多种工具帮助开发者管理和调试服务,如CXF的...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而CXF则是一个流行的Web服务实现框架。这两个框架的集成使得开发者能够轻松地创建和消费Web服务。本实例将详细介绍如何在Spring环境中集成CXF,并使用...
【标签】:“cxf例子认证登录客户端,cxf学习,cxf实例,cxf” 这些标签突出了几个关键的学习点:首先,你需要熟悉CXF的基础知识,包括如何创建服务和客户端;其次,了解如何实现认证机制,这对于任何涉及用户访问...
CXF的安全功能主要由WS-Security(Web Services Security)规范支持,包括身份认证、消息完整性、消息机密性等。 在CXF中,安全验证通常通过以下几种方式实现: 1. **基本认证**:基于HTTP的基本认证,需要提供...
【CXF WSSCEURITRY 身份认证demo】是一个关于在WEB服务中使用Apache CXF框架实现WS-Security(Web Services Security)标准的身份验证的示例项目。该示例着重展示了如何在CXF中配置和使用WS-SecureConversation(WS-...
在CXF中,这可以通过实现不同级别的安全性来完成,如基本认证、OAuth、WS-Security等。我们将重点讨论基本认证和WS-Security这两种常见的实现方式。 1. **基本认证**: 基本认证是最简单的HTTP身份验证形式,它...
Apache CXF是一个开源的Java框架,它用于创建和消费SOAP和RESTful Web服务。这里的验证过程通常涉及到安全控制,确保只有经过授权的用户才能访问服务。 在Web服务中,认证是确保用户身份的过程,而授权则是决定用户...
8. **cxf-rt-ws-security.jar**: 包含了WS-Security和其他安全相关的实现,用于Web服务的安全认证和加密。 9. **cxf-tools-common.jar** 和 **cxf-tools-wsdlto-core.jar** 等工具类库,用于生成服务端和客户端代码...
Apache CXF是一个开源的Java框架,它用于构建和开发Web服务。这个框架提供了一种灵活的方式来进行服务的创建、发布和调用。"Code-First"是CXF的一个重要概念,意味着开发者首先编写Java代码,然后CXF会自动生成相应...
这通常涉及到验证用户身份(例如通过令牌或认证信息),并确保他们有执行所需操作的权限。如果权限不足,拦截器应该抛出异常,阻止请求继续执行。 3. **注册拦截器**:创建好拦截器后,需要将其添加到CXF客户端的...