用jmeter测试https应用

上一篇 / 下一篇  2008-12-17 15:16:01 / 个人分类:JMeter

  该文为转载

 

   实验室的项目是做关于web servicesecurity产品,主要是对soap消息进行加密签名。上一次的性能测试是将单纯调用web service和应用我们的security产品后的web service进行对比,然而差距还是相当明显的,尤其是在高并发的时候,毕竟中间的加密和签名过程是相当消耗时间的。上次review的时候,老师就说性能有很大的程度可以提高,我本来想说基本没太多的空间可以优化(除了之后会加入的线程池,应该会有小幅度性能提升),但是苦于没有数据支持。正好这两天为了准备开题,一直在看一些文章,看到网上有人提到,SSL + WS-Security = Web Service安全保障,主张用https的方式来传输soap消息。虽然不是什么很好的方法,不过不是正好拿来作为产品测试对比的对象嘛。

    tomcat上已经配置好了axis,通过http访问soap消息是没有问题了。但是还没有配置https,所以按着官方文档开始干活了。首先用keytool生成服务器段的keystore

keytool -genkey -alias tomcat -keystore ktomcat.keystore

   注意,alias的密码要与keystore的密码一致,tomcat文档上是这么说的。接着是修改了server.xml:

<Connector
           port="8443" protocol="HTTP/1.1" minSpareThreads="5" maxSpareThreads="75"
           enableLookups="true" disableUploadTimeout="true"
           acceptCount="100"  maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="ktomcat.keystore" keystorePass="changeit"
           clientAuth="false" sslProtocol="TLS"/>

   重启tomcat之后,输入https://localhost:8443进行验证(注意是8443哦,我一开始居然傻乎乎的输入8080^_^

   接着设置客户端的trustStorejmeter需要它来信任tomcat服务器段的证书

keytool -export -alias tomcat -keystore ktomcat.keystore -file tomcat.crt
keytool -import -alias tomcat -file tomcat.crt -keystore tclient.keystore

    tomcat上的https配置成功之后,就开始jmeter的配置了,默认情况下用jmeter是不可以访问我们配置的https应用的,不过却可以访问像google等网站上的https应用,原因很简单,我们自己生成的证书是不被信任的。jmeter的官方网站有一个很大的陷阱,上面说只要修改jmeter.properties参数,将SSL Configuration部分内的注释去掉就可以了,如下

#---------------------------------------------------------------------------
# SSL configuration
#---------------------------------------------------------------------------

#Classname of the ssl provider to be used (to enable testing of https urls)
#And the package name where Stream Handlers can be found
#These provided defaults can be uncommented, and they will work if you are using
#Sun's JSSE implementation.

ssl.provider=com.sun.net.ssl.internal.ssl.Provider
ssl.pkgs=com.sun.net.ssl.internal.www.protocol

#The location of the truststore (trusted certificates) and keystore ( if other than the default.
#you can uncomment this and change the path to the correct location.
javax.net.ssl.trustStore=/home/flyerhzm/software/jakarta-jmeter-2.2/tclient.keystore
javax.net.ssl.keyStore=/home/flyerhzm/software/jakarta-jmeter-2.2/kclient.keystore

#The password to your keystore
javax.net.ssl.keyStorePassword=changeit

   不过结果还是失败,尝试了好多次,总是报SSLHandshakeException。如果是通过浏览器访问的话,浏览器都会提醒你对方的证书不合法,是否要信任它,但是java是不会询问你,而是直接抛出异常。但是如果设置了trustStore的话,就会信任对方的证书啦,太奇怪了。

    google了一下有关SSLHandshakeException,网上有说可以用-D方式添加应用参数,于是打开了jmter启动文件,修改最后一句话为:

java $JVM_ARGS $ARGS -jar `dirname $0`/ApacheJMeter.jar-Djavax.net.ssl.trustStore=/home/flyerhzm/software/jakarta-jmeter-2.2/tclient.keystore -Djavx.net.ssl.trustStorePassword=changeit"$@"

   居然成功了,呵呵。可恶,配置文件jmeter.properties居然不起作用,害我辛苦到现在。

   趁热打铁,测试了一下通过https访问web service,果然比应用我们的security产品要多消耗1倍多的时间,赞,终于有数据可以说服老师了,哈哈。

 


TAG: jmeter 测试 https 加密 JMeter

引用 删除 gjay1688   /   2010-01-12 09:27:21
题目应该改成测试webservice吧
用web的形式间接访问webservice是比直接访问webservice消耗的时间长,而且长的多
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar