让cxf开发的RESTful风格的WEB SERVICE支持https访问

6月 2, 2015 |

Demo 下载: testcxf-rest-https.zip

上一篇spring整合cxf开发JSON格式的RESTful风格web service,如果我们想让其支持https访问该怎么办呢?

注:本文只支持服务器端认证,如要要双向认证,请参考cxf 官方samples中的wsdl_first_https和jax_rs_basic_https两个例子。
实现步骤:

一、产生证书

1)产生服务器的密码对

-dname 指定distinguished name,感觉就是ldap中的目录结构,虽然tomcat默认的https端口是8443,这个地方也要用localhost而不是localhost:8443,不然会有问题。-storepass指定keystore的密码,因为产生的key以一个.jks文件存放在磁盘上,当我们需要删除其中的某些证书或者导入某个证书时需要使用storepass。
keytool -genkeypair -validity 730 -alias javacoder_cn -keystore javacoder_cn.jks -dname "cn=localhost" -keypass 123456 -storepass 123456

2)产生客户端密码对

按照提示输入CN,OU,DC的值。
keytool -genkeypair -validity 730 -alias javacoder_cn -keystore clientKeystore.jks -keypass 123456 -storepass 123456

3)导出服务器证书

keytool -export -rfc -keystore javacoder_cn.jks -alias javacoder_cn -file MyService.cer -storepass 123456

4)将服务器的证书导入客户端的jks中

keytool -import -noprompt -trustcacerts -file MyService.cer -alias javacoder_cn -keystore clientKeystore.jks -storepass 123456

5)查看jks文件中的证书内容

keytool -list -v -keystore clientKeystore.jks

二、配置web server,修改tomcat的server.xml

将port=8443的Connector反注释,添加keystoreFile和keystorePass,修改后的Connector为:

三、为客户端添加https支持,参考clientConfig.xml文件

clientConfig.xm文件其实就是一个标准的spring配置文件。在该文件中添加如下内容

这个配置要注意的一点是所有的通配符采用标准的正则表达式,".*"表示任意长度的字符串。cipherSuitesFilter配置支持的ssl加密算法,同理,通配符也是标准的正则表达式。详细介绍请参看官方文档Client HTTP Transport (including SSL support)

四、修改客户端的代码

调用WebClient.create时提供我们的配置文件
// Service instance
WebClient client = WebClient.create(domainAddress, "clientConfig.xml");

五、让浏览器访问我们自签名的https服务器

如果我们想要让浏览器能访问我们自签名的https服务器,需要将MyService.cer导入浏览器,对于fireforx,如图:
option->Advanced->View Certificates-Import

cxf-rest-https

Posted in: 开源项目 | Tags: ,

Comments are closed.