cxf客户端中的SNI配置(3.1.2)
我想在使用CXF客户端(3.1.2)进行rest呼叫时设置自定义SNI主机名(SNI配置)。 我正在使用java 8.我能够使用HTTPClient做同样的事情(参见下面的强文本代码剪切以供参考),但我无法弄清楚如何使用CXF客户端做同样的事情。
//对于HTTP客户端
private SSLConnectionSocketFactory createSSLConnectionSocketFactory(String sniHostanme, SSLContext sslContext){ // Fix for host name verifier, need to implement---------------------- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2" }, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier()) { @Override protected void prepareSocket(SSLSocket socket) throws IOException { try { // System.out.println("************ setting socket HOST property *************"); // If SNI is required if (StringUtils.isNotBlank(sniHostanme)) { log.debug("SNI HOSTNAME = "+sniHostanme); List sniServerNames = new ArrayList(); sniServerNames.add(new SNIHostName(sniHostanme)); SSLParameters sslParam = new SSLParameters(); sslParam.setServerNames(sniServerNames); socket.setSSLParameters(sslParam); } // PropertyUtils.setProperty(socket, "host", "ws.mastercard.com"); } catch (Exception ex) { log.error(ex.getMessage()); } // super.prepareSocket(socket); } }; return sslsf; }
使用org.apache.cxf.configuration.jsse.TLSClientParameters类和public final void setCertAlias(String ctAlias)方法设置服务器端使用的证书别名,这在密钥库有多个证书时很有用。希望这对您有所帮助。
- Apache CXF客户端在Eclipse中加载正常,但独立的jar在WSDLServiceFactory中抛出NullpointerException
- 如何修改出站CXF请求的原始XML消息?
- 加密加密属性文件中的密码
- CXF 2.7.7 org.apache.cxf.interceptor.Fault:意外的元素
- CXF客户端exception:{XXX}的拦截器抛出exception,现在展开
- SSL通信中的Apache CXFexception:SocketTimeOut
- 使用Apache CXF通过REST解析String 请求参数
- 如何在将来取消时在Callable中终止CXF Web服务调用
- 引起:java.net.SocketException:来自服务器的文件意外结束