我们有2个环境,每个环境都有一个证书PFX文件。
我尝试导入这两个证书来制作一个JKS / P12文件,并尝试根据别名访问证书。虽然我可以使用该命令看到2个条目
keytool -list -v -keystore "C:/yyyyy/xxxx.jks" -storepass "kdjfkdjfkdjf" > "C:/KeyStoreContents.txt"
,我无法访问任何证书并看到错误“找不到别名”。
我有办法根据应用环境设置javax.net.ssl.keyStore
和javax.net.ssl.keyStorePassword
的值吗?
我尝试在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)}
和${__setProperty(javax.net.ssl.keyStore, C:/yyyyyy/QA.p12)}
,但上述方法都没有。
有没有办法在执行Keystore Configuration
元素之前动态加载这些值?
答案 0 :(得分:2)
我真的不明白为什么你需要使用2个不同的密钥库,因为Keystore Configuration提供了使用多个证书的可能性。
来自文档:
要使JMeter使用多个证书,您需要确保:
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.properties或user.properties中设置您对HTTP请求使用HTTPClient 4(ADVISED)或HTTPClient 3.1(DEPRECATED SINCE 3.0)实现
如果出于任何原因,您仍然需要使用2个密钥库,而不是来自一个密钥库的2个证书,遗憾的是在密钥库配置初始化之前无法执行Beanshell测试元素(或任何内容)。
但是,您应该可以强制从Beanshell脚本重新初始化。
示例代码:
{{1}}
有关JMeter中Beanshell脚本的高级信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component文章。
答案 1 :(得分:1)
我可以通过以下步骤解决此问题:
使用以下命令为这些证书设置有意义的别名:
keytool -changealias -alias "ExistingAliasName" -destalias "AppName_Environment" -keystore "C:\JKS\AppName_environment.p12" -storepass "StorePassword"
第3步的注释:
一个。它可能会要求输入keypass,我们可以进入商店通行证
湾即使我们在别名中提供大写,文本也会转换为小写,并将设置为别名
℃。在这里,我遵循了这个别名命名约定:JMeter中提到的应用程序name_environment名称
将证书导入JKS文件,我们可以为JKS设置任何密码,不需要与证书相同。请参阅以下命令:
keytool -importkeystore -srckeystore "C:\ JKS\ AppName _ Environment.p12" -srcstoretype pkcs12 -srcstorepass "SourceStorePasword” -destkeystore "C:\HomesiteJKS\BungalowFinal.jks" -deststoretype JKS -storepass "JKSPassword"
一旦我们有了最终的JKS,我们就可以开始更改JKS中每个证书的密码,并使其与JKS(密钥库)密码相同。请参阅以下命令:
keytool -keypasswd -alias " AppName_Environment" -keystore “C:\JKS\Final.jks"
步骤6注意:它会要求您输入密钥库密码,现有证书密码,新密码并重复新密码
现在我们可以使用此文件并在JMeter的system.properties中添加以下条目:
javax.net.ssl.keyStore=C:/JKS/Final.jks
javax.net.ssl.keyStorePassword=JKSPassword
在JMeter的user.properties或jmeter.properties中添加以下条目,这将允许我们使用JKS文件中的多个证书:
https.use.cached.ssl.context=false
HttpClient4
使用以下值将Keystore配置元素添加到JMeter测试:
一个。预加载:真实
湾变量名持有证书别名:CertAlias
℃。别名开始索引:0
d。别名结束索引:10000