如何让 Apache JMeter 使用来自(受密码保护的)jks 密钥库的(受密码保护的)密钥

How can I let Apache JMeter use (password protected) keys from a (password protected) jks keystore

上下文

我有一个 密钥库 (keystore.jks) 受密码保护
我可以通过提供

让 jmeter 使用该商店的密钥

使用适当的值,只要密钥本身不受密码保护。

但是,我的特定密钥库包含多个密钥,每个密钥都需要密码才能检索它们

我如何访问普通旧密钥 Java:

String keyStorePath = "/keystore.jks";
char[] keyStorePassword = "keyStorePassword".toCharArray();

String keyAlias = "keyAlias";
char[] keyPassword= "keyPassword".toCharArray();


KeyStore keyStore = KeyStore.getInstance("JKS");
try (InputStream is = this.getClass().getResourceAsStream(keyStorePath )) {
    keyStore.load(is, keyStorePassword);
}

PrivateKey privateKey = (PrivateKey) keyStore.getKey(keyAlias, keyPassword);
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(keyAlias);

如何在 JMeter 中检索和使用此类密钥?

就是这个问题。

JMeter 的 Keystore Configuration 不允许您指定密钥的密码。

环顾四周后,我得出的结论是目前 (JMeter 5.0) 不可能做到这一点。

通过在启动时提供这些属性,让 jmeter 使用密钥库中的证书:

  • -Djavax.net.ssl.keyStore
  • -Djavax.net.ssl.keyStorePassword

商店内的证书应具有与商店相同的密码,然后当您使用 Keystore Configuration 指定(保存的变量)证书别名时,它们可以毫无问题地被提取。

将key和value(.crt)文件转换为单个文件并在Jmeter中使用 步骤

  1. 打开命令提示符
  2. 转到放置键和值的目录
  3. 运行 命令下方

openssl pkcs12 -export -out jmeterkeystore.p12 -inkey your.private.key -in your.certificate

以上命令创建一个.p12类型的文件 4. 将.p12文件转为jks类型,使用下面的命令

  keytool -importkeystore -srckeystore jmeterkeystore.p12 -srcstoretype pkcs12 - 
     destkeystore MY_KEYSTORE.jks -deststoretype jks -deststorepass changeit
  1. 在 jmeter bin 文件夹中,打开 system.properties 文件并设置以下属性

    javax.net.ssl.keyStoreType=jks javax.net.ssl.keyStore=C:/Dev/cer/ javax.net.ssl.keyStore密码=

完成你现在可以运行你的脚本