JMeter-基于应用程序环境设置javax.net.ssl.keyStore和javax.net.ssl.keystrepassword

JMeter-基于应用程序环境设置javax.net.ssl.keyStore和javax.net.ssl.keystrepassword,java,jmeter,keystore,beanshell,jks,Java,Jmeter,Keystore,Beanshell,Jks,我们有2个环境,每个环境都有一个证书PFX文件。 我尝试导入这两个证书以生成一个JKS/P12文件,并尝试根据别名访问证书。虽然我可以使用命令看到2个条目 keytool-list-v-keystore“C:/yyyy/xxxx.jks”-storepass“kdjfkdjf”>“C:/KeyStoreContents.txt”,我无法访问任何证书并看到错误“未找到别名” 有没有一种方法可以根据应用程序环境设置javax.net.ssl.keyStore和javax.net.ssl.keystr

我们有2个环境,每个环境都有一个证书PFX文件。 我尝试导入这两个证书以生成一个JKS/P12文件,并尝试根据别名访问证书。虽然我可以使用命令看到2个条目
keytool-list-v-keystore“C:/yyyy/xxxx.jks”-storepass“kdjfkdjf”>“C:/KeyStoreContents.txt”
,我无法访问任何证书并看到错误“未找到别名”

有没有一种方法可以根据应用程序环境设置
javax.net.ssl.keyStore
javax.net.ssl.keystrepassword
的值

我尝试在beanshell预处理器中设置它们:

System.setProperty("javax.net.ssl.keyStore","C:/yyyyy/" + pOneTwoName + ".p12");
System.setProperty("javax.net.ssl.keyStorePassword", pOneTwoPwd);
但效果不太好

我还尝试了
${{p(javax.net.ssl.keyStore,C:/yyyyyy/QA.p12)}
${{u setProperty(javax.net.ssl.keyStore,C:/yyyyyyy/QA.p12)}
,但上述方法均无效


有没有办法在执行
密钥库配置
元素之前动态加载这些值?

我真的不明白为什么需要使用两个不同的密钥库,因为这样可以使用多个证书

引用文件:

要使JMeter使用多个证书,您需要确保:

  • https.use.cached.ssl.context=false
    在jmeter.properties或user.properties中设置

  • 您可以对HTTP请求使用HTTPClient 4(建议)或HTTPClient 3.1(自3.0以来已弃用)实现

如果出于任何原因,您仍然需要使用2个密钥库,而不是来自一个密钥库的2个证书,很遗憾,在密钥库配置初始化之前,无法执行Beanshell测试元素(或任何内容)

但是,您应该能够从Beanshell脚本强制重新初始化

示例代码:

import org.apache.jmeter.config.KeystoreConfig;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;

import java.lang.reflect.Field;
import java.util.Collection;


StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField("test");
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);

SearchByClass keyStoreConfigs = new SearchByClass(KeystoreConfig.class);
testPlanTree.traverse(keyStoreConfigs);
Collection keystoreConfigResults = keyStoreConfigs.getSearchResults();

KeystoreConfig keystoreConfig = (KeystoreConfig)keystoreConfigResults.toArray()[0];
keystoreConfig.testStarted();

有关JMeter中Beanshell脚本的高级信息,请参阅文章。

我真的不明白为什么需要使用两个不同的密钥存储库,因为它提供了使用多个证书的可能性

引用文件:

要使JMeter使用多个证书,您需要确保:

  • https.use.cached.ssl.context=false
    在jmeter.properties或user.properties中设置

  • 您可以对HTTP请求使用HTTPClient 4(建议)或HTTPClient 3.1(自3.0以来已弃用)实现

如果出于任何原因,您仍然需要使用2个密钥库,而不是来自一个密钥库的2个证书,很遗憾,在密钥库配置初始化之前,无法执行Beanshell测试元素(或任何内容)

但是,您应该能够从Beanshell脚本强制重新初始化

示例代码:

import org.apache.jmeter.config.KeystoreConfig;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;

import java.lang.reflect.Field;
import java.util.Collection;


StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField("test");
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);

SearchByClass keyStoreConfigs = new SearchByClass(KeystoreConfig.class);
testPlanTree.traverse(keyStoreConfigs);
Collection keystoreConfigResults = keyStoreConfigs.getSearchResults();

KeystoreConfig keystoreConfig = (KeystoreConfig)keystoreConfigResults.toArray()[0];
keystoreConfig.testStarted();

有关JMeter中Beanshell脚本的高级信息,请参阅文章。

我可以通过以下步骤解决此问题:

  • 获取应用程序环境的所有证书(pfx)
  • 可选:将文件扩展名更改为p12
  • 使用以下命令为这些证书设置有意义的别名:

    keytool-changealias-alias“ExistingAliasName”-destalias“AppName\u Environment”-keystore“C:\JKS\AppName\u Environment.p12”-storepass“StorePassword”

    步骤3的注意事项:

    a。它可能要求输入keypass,我们可以输入商店通行证

    b。即使我们在别名中提供大写,文本也将转换为小写,并设置为别名

    c。在这里,我遵循这个别名命名约定:应用程序名\ JMeter中提到的环境名

  • 将证书导入JKS文件,我们可以将任何密码设置为JKS,并且不需要与证书相同。请参阅以下命令:

    keytool-importkeystore-srckeystore“C:\JKS\AppName\uEnvironment.p12”-srcstoretype pkcs12-srcstorepass“SourceStorePasword”-destkeystore“C:\homestitejks\BungalowFinal.JKS”-deststoretype JKS-storepass“jkspasword”

  • 通过更改所需的参数值,对所有剩余的证书重复上述步骤
  • 一旦我们有了最终的JKS,我们就可以开始更改JKS中每个证书的密码,并使其与JKS(密钥库)密码相同。请参阅以下命令:

    keytool-keypasswd-alias“AppName\u Environment”-keystore“C:\JKS\Final.JKS”

    步骤6注意:它将要求您输入密钥库密码、现有证书密码、新密码和重复新密码

  • 对JKS文件的所有证书条目重复此步骤,使其具有所有证书的JKS密码
  • 现在,我们可以使用此文件并在JMeter的system.properties中添加以下条目:
    javax.net.ssl.keyStore=C:/JKS/Final.JKS

    javax.net.ssl.keystrepassword=JKSPassword

  • 在jmeter的user.properties或jmeter.properties中添加以下条目,这将允许我们使用JKS文件中的多个证书:

    https.use.cached.ssl.context=false

  • 将Http请求实现更改为
    HttpClient4
  • 使用以下值将密钥库配置元素添加到JMeter测试:

    a、 预加载:真

    b、 持有证书别名的变量名:CertAlias

    c、 别名开始索引:0

    d、 别名结束索引:10000

  • JMeter用户定义变量必须具有具有所需别名的CertAlias
  • 所有设置都已设置,我们应该能够通过加载别名为的特定证书在不同的应用程序环境中运行脚本

  • 我可以通过以下步骤解决此问题:

  • 获取应用程序环境的所有证书(pfx)
  • 可选:将文件扩展名更改为p12
  • 使用以下命令为这些证书设置有意义的别名:

    keytool-changealis-alias“ExistingAl