`

cxf认证之https单向认证

    博客分类:
  • cxf
cxf 
阅读更多

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.

1
0
分享到:
评论

相关推荐

    4.CXF安全访问之单向SSL或者双向SSL(三)

    **双向SSL**,也称为客户端和服务器之间的双向认证,比单向SSL更安全。在双向SSL中,不仅服务器验证客户端,客户端也要验证服务器的身份,同时服务器也会验证客户端的身份。这需要客户端和服务器各自拥有并提供有效...

    apache-cxf结合spring示例

    8. **安全机制**:CXF提供了丰富的安全特性,如基本认证、digest认证、OAuth、SSL/TLS、WS-Security等,可实现对Web服务的安全保护。 9. **拦截器与处理器**:CXF允许自定义拦截器和处理器,以扩展服务功能,比如...

    第16讲-SOAP与CXF开发WebService.pptx

    SOAP Header包含一组可选的Header blocks,用于增加消息的功能,如路由、认证等。SOAP Body则包含实际的应用程序数据。Header blocks中的role、relay和mustUnderstand属性分别定义了节点的角色、是否传递未知Header...

    cxf开发实践

    - **RSA算法:** 是最广为人知的公开密钥加密算法之一,以其发明者Rivest、Shamir和Adleman的首字母命名。 **2.2 证书与CA认证** - **证书作用:** 证书不仅包含公钥信息,还包括身份信息和颁发者的签名。 - **...

    JAX-WS之旅(二)

    10. **工具支持**: 开发者可以使用诸如Apache CXF、Metro等JAX-WS实现工具,它们提供了丰富的功能,如代码生成、调试、测试等,大大简化了Web服务的开发过程。 在提供的源码中,我们可以看到实际的JAX-WS服务端和...

Global site tag (gtag.js) - Google Analytics