51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1685|回复: 3
打印 上一主题 下一主题

[原创] Jmeter 实现 HTTPS 双向认证方案

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-26 10:11:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
目前一般web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验证,一般都在应用逻辑层来保证用户的合法登入。
但如果是企业应用对接,情况就不一样,可能会要求对client(相对而言)做身份验证。这时需要做双向认证

针对单向认证的Jmeter其实不用导入证书也可以调用,Jmeter默认是忽略证书的,双向的我们需要看在Jmeter的System里面增加trustStore秘钥库的设置,我们先看看SSLManager类里面的几个常量

  1. private static final String SSL_TRUST_STORE = "javax.net.ssl.trustStore";// 证书库

  2. private static final String KEY_STORE_PASSWORD = "javax.net.ssl.keyStorePassword"; // 密码

  3. public static final String JAVAX_NET_SSL_KEY_STORE = "javax.net.ssl.keyStore"; // 证书库
复制代码
双向认证在需要客户端证书的同时也需要对客户端认证,所以我们把服务端的证书放在trustStore证书库里面

操作步骤

1.首先在System.propertis里面增加javax.net.ssl.trustStore=D:\key\client.truststore
  1. # Truststore properties (trusted certificates)
  2. javax.net.ssl.trustStore=D:\\key\\client.truststore
复制代码
truststore 也是需要密码的,大家在通过SSL管理器导入证书时要输入密码truststore 用的也是这个密码,所以这里面truststore的密码要和keyStore的密码保持一致,因为在Jmeter的源代码里面都是调用的一个获取密码,看下源码
  1. private String getPassword() {
  2.         String password = System.getProperty(KEY_STORE_PASSWORD);
  3.         if (null == password) {
  4.             final GuiPackage guiInstance = GuiPackage.getInstance();
  5.             if (guiInstance != null) {
  6.                 synchronized (this) { // TODO is sync really needed?
  7.                     this.defaultpw = JOptionPane.showInputDialog(
  8.                             guiInstance.getMainFrame(),
  9.                             JMeterUtils.getResString("ssl_pass_prompt"),  // $NON-NLS-1$
  10.                             JMeterUtils.getResString("ssl_pass_title"),  // $NON-NLS-1$
  11.                             JOptionPane.QUESTION_MESSAGE);
  12.                     System.setProperty(KEY_STORE_PASSWORD, this.defaultpw);
  13.                     password = this.defaultpw;
  14.                 }
  15.             } else {
  16.                 log.warn("No password provided, and no GUI present so cannot prompt");
  17.             }
  18.         }
  19.         return password;
  20.     }
复制代码
2.truststore设置完成之后,在通过SSL管理器导入证书

3.设置完上面两个就可以正常调用了,

4.那么通过SSL管理器导入证书是不保存在你的JMX脚本里面的,所以需要手工做一下,这个时候也可以通过System.property设置(javax.net.ssl.keyStore=D:\key\client.p12)里面设置证书和trustStore一样,本着JAVA的思想,一次编译多环境执行的概念,修改System.property的配置文件并不是很好,所以我们可以采取一下做法

因为Jmeter是从系统系统变量里面获取的路径所以我们要System.property,采取Beanshell设置
  1. import org.apache.jmeter.util.SSLManager;
  2. System.setProperty("javax.net.ssl.keyStore", "D:\\key\\client.p12");
  3. System.setProperty("javax.net.ssl.keyStorePassword", "123456");
  4. System.setProperty("javax.net.ssl.trustStore", "D:\\key\\client.truststore");
  5. SSLManager.reset();
  6. SSLManager.getInstance();
复制代码
如上:里面执行了SSLManager的两个方法,这两个方式是在页面SSL管理器导入证书的时候触发,属于初始化的操作,因为我们不用他了,我们要主动去触发执行。
BeanShell里面必须要用System.setProperty去设置,用他自带的props去设置,只代表是当前上下文的变量,不代表系统变量,${__serProperty("","")});也一样失效。
因为Jmeter是自带缓存机制的所以这个Beanshell执行一次就行了,我们采取仅一次执行器,如果放在前置处理器里面的话会每次都执行,所以要单独创建beanshell取样器
如下:

5.设置上面的之后我们就可以把路径等信息抽取出来,也可以通过一个JMX在多个JMETER都可以执行




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2017-6-26 15:14:58 | 只看该作者
八戒你干嘛 发表于 2017-6-26 15:13
你好,第一步中client.truststore 是怎么生成的呢?

keytool -import -alias "my alipay cert" -file www.alipay.com.cert -keystore my.store
”my alipay cert”是个别名,随便取。“www.alipay.com.cert”这个文件就是从浏览器中导出的支付宝的证书。
“my.store”是生成的自己 的证书库文件。回车执行,
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2017-6-26 15:14:44 | 只看该作者
八戒你干嘛 发表于 2017-6-26 15:13
你好,第一步中client.truststore 是怎么生成的呢?

keytool -import -alias "my alipay cert" -file www.alipay.com.cert -keystore my.store
”my alipay cert”是个别名,随便取。“www.alipay.com.cert”这个文件就是从浏览器中导出的支付宝的证书。
“my.store”是生成的自己 的证书库文件。回车执行,
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2024-9-19 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    2#
    发表于 2017-6-26 15:13:56 | 只看该作者
    你好,第一步中client.truststore 是怎么生成的呢?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 05:21 , Processed in 0.073671 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表