Axis2-1.6.2 HTTPS/SSL非常慢,解决思路

标签: axis2 https ssl | 发表时间:2015-08-07 16:09 | 作者:大狐狸_Bigfox
出处:http://www.iteye.com

最近有个项目需要由axis1.4升级到axis2-1.6.2,原因是由于axis1版本无法控制连接超时时间,只支持设置readtimeout.故需要升级。

实验环境如下: 
服务器是Windows 2008 R2 + IIS+ C#,SSL双向认证 
客户端是Windows 7 + Axis2-1.6.2

项目是基于HTTPS访问Web service,axis1连接正常,速度正常,升级到axis2后

,通过SSL调用服务时,建立连接的速度变得非常非常慢。,通常需要30s多。


然后考虑到需要跟踪源代码,下了各种源代码包。虽然在Axis2里找到了导致速度缓慢的代码,但那里的Axis2只是调用Httpclient的方法,没办法,只好再跟踪Httpclient的源代码,发现导致问题的代码又在Axiom中,继续跟踪Axiom的源代码,最后发现问题出在OutputStream.flush()上,SSL时,这个flush相当费时,因为Axis2调用Web service本质上还是向服务器POST一个请求,所以我怀疑要么Httpclient哪里出了问题要么Axis2哪里出了问题。同时在服务器端,我用Soapmonitor监控请求,发现速度缓慢的问题的确是出在客户端这边。 

最后研究了大量文章,如下方法可解决速度慢的问题: 

          //  If the SO_TIMEOUT of CONNECTION_TIMEOUT is set by dynamically the
         //  override the static config 
         Integer tempSoTimeoutProperty  = 
                (Integer) msgContext.getProperty(HTTPConstants.SO_TIMEOUT);
        Integer tempConnTimeoutProperty  = 
                (Integer) msgContext
                        .getProperty(HTTPConstants.CONNECTION_TIMEOUT);
         long  timeout  =  msgContext.getOptions().getTimeOutInMilliSeconds();

         if  (tempConnTimeoutProperty  !=   null )  {
            int connectionTimeout = tempConnTimeoutProperty.intValue();
            // timeout for initial connection
            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
        }   else   {
            // set timeout in client
            if (timeout > 0) {
                httpClient.getHttpConnectionManager().getParams().setConnectionTimeout((int) timeout);
            }
        } 

Axis2默认状态下设置了httpclient的超时为30000MS。而我用Httpclient写的客户端中并没有设置超时(因为参考的Httpclient网站的例子中也未设置超时)。问题似乎就处在这里,我在我写的Httpclient客户端中,添加了设置超时的代码:client.getHttpConnectionManager().getParams().setConnectionTimeout(30000),结果果然建立SSL连接时变得非常非常慢,如果将超时设置为0,那么速度恢复正常。 

因此,在调用Axis2写的客户端中设置options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 0),那么SSL连接的速度会正常,而重用SESSION的作用似乎对提升速度并不明显。 
            但是以上解决方案又违背了axis1升级到axis2控制连接超时时间的初衷,故有去研究了相关文章,最后发现了个貌似是正确的解决方案,那就是去设置host。事实证明这个方法是正确的,不但连接正常了,而且可以正常控制连接超时时间。哈哈哈,终于解决了,痛苦的过程。

          host文件新增一行:   webservice 服务的IP地址即可。

猜测引起变慢的原因大概是域名反向解析引起的。吼吼,希望有大神给出解答。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [axis2 https ssl] 推荐:

Axis2-1.6.2 HTTPS/SSL非常慢,解决思路

- - 编程语言 - ITeye博客
最近有个项目需要由axis1.4升级到axis2-1.6.2,原因是由于axis1版本无法控制连接超时时间,只支持设置readtimeout.故需要升级. 服务器是Windows 2008 R2 + IIS+ C#,SSL双向认证 . 客户端是Windows 7 + Axis2-1.6.2. 项目是基于HTTPS访问Web service,axis1连接正常,速度正常,升级到axis2后.

維基百科全面支援 HTTPS (SSL)

- sxyttr - FeedzShare
来自: Gea-Suan Lin's BLOG - FeedzShare  bullog.org - FeedzShare  . 发布时间:2011年10月03日,  已有 2 人推荐. 維基百科在官方的 Blog 上宣佈,所有的服務都支援 HTTPS (SSL):「Native HTTPS support enabled for all Wikimedia Foundation wikis」,也就是說,像是「https://zh.wikipedia.org/wiki/Wikipedia:首页」這樣的網址都支援了.

聊聊HTTPS和SSL/TLS协议

- - 外刊IT评论
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”). 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别). 考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下.

HTTPS、SSL与数字证书介绍

- - 忘我的追寻
在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了. 本文追本溯源围绕这个模式谈一谈. HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全的HTTP协议,因此可以称为安全的超文本传输协议. HTTP协议直接放置在TCP协议之上,而HTTPS提出在HTTP和TCP中间加上一层加密层.

Web 主机管理(SSL加密的HTTPS) -- Webmin

- 李帅 - Wow! Ubuntu
Webmi n是目前功能最强大的基于Web的UNIX系统管理工具. 管理员可通过浏览器访问 Webmin 的各种管理功能并完成相应的管理动作. Webmin 让你能够在远程使用支持HTTPS(SSL 上的 HTTP)协议的 Web 浏览器通过Web界面管理你的主机. 如果公司由VPN的用户,最适合不过了,即使外地出差,也能够访问在公司的linux主机.

免费SSL证书(https网站)申请 - osfipin - 博客园

- -
如何拥有一个自己的免费的SSL证书,并且能够长期拥有. 这篇文章让你找到可用的免费证书o(* ̄︶ ̄*)o. 各厂商提供的免费SSL基本是Symantec(赛门铁克),申请一年,不支持通配符,有数量限制. 免费数字证书,最多保护一个明细子域名,不支持通配符,一个阿云帐户最多签发20张免费证书. 兼容性如下操作系统版本IOS 5.0+、Android 2.3.3+、JRE 1.6.5+、WIN 7+.

全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL

- - 行业应用 - ITeye博客
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. 即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL.   它是一个URI scheme(抽象标识符体系),句法类同http:体系.

是时候支持HTTPS了:免费SSL证书letsencrypt配置教程

- - 后端技术 by Tim Yang
今天抽空将 blog 增加了 HTTPS 支持,并停止了原来的 HTTP 服务. 由于证书仅网站域名需要,因此使用了免费的 Let’s Encrypt 证书服务. 根据维基百科的说明,Let’s Encrypt 是一个于2015年三季度推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书.

Nginx + Tomcat + HTTPS 配置原来不需要在 Tomcat 上启用 SSL 支持

- -
之前在网上搜索到的很多文章在描述. Nginx + Tomcat启用 HTTPS 支持的时候,都必须在 Nginx 和 Tomcat 两边同时配置 SSL 支持. 但我一直在想为什么就不能按照下面的方式来配置呢. 就是 Nginx 上启用了 HTTPS,而 Nginx 和 Tomcat 之间走的却是普通的 HTTP 连接.