2016-06-21 13 views
1

У нас есть 2 среды, и для каждого из них у нас есть файл сертификата PFX. Я попытался импортировать эти два сертификата, чтобы сделать один файл JKS/P12, и попытался получить доступ к сертификату, основанному на имени псевдонима. Хотя я могу видеть 2 записи, используя команду keytool -list -v -keystore "C:/yyyyy/xxxx.jks" -storepass "kdjfkdjfkdjf" > "C:/KeyStoreContents.txt", я не могу получить доступ к любому из сертификатов и видеть, что псевдоним ошибки не найден.JMeter - настройка javax.net.ssl.keyStore и javax.net.ssl.keyStorePassword на основе прикладной среды

У меня есть способ установить значения 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

Не обязательно. Каков был результат 'keytool -list'? – EJP

ответ

1

Я смог решить эту проблему с ниже шаги:

  1. Получить все сертификаты (PFX) для прикладных сред
  2. Дополнительно: Измените расширение файлов на p12
  3. Установите значимые имена псевдонимов на эти сертификаты с ниже командами:

    keytool -changealias -alias "ExistingAliasName" -destalias "AppName_Environment" -keystore "C:\JKS\AppName_environment.p12" -storepass "StorePassword"

    Примечания для этапа 3:

    a. Он может попросить ввести ключ, и мы можем ввести пропуск магазина

    b. Даже мы предоставляем верхний регистр в псевдониме, текст будет преобразован в нижний регистр и будет установлен как псевдоним

    c.Здесь я придерживался этого соглашения об именах алиасов: имя приложения имя_имени, как указано в JMeter

  4. Импортировать сертификаты в файл JKS, и мы можем установить любой пароль для JKS и не обязательно должны быть такими же, как cert. Смотрите следующую команду:

    keytool -importkeystore -srckeystore "C:\ JKS\ AppName _ Environment.p12" -srcstoretype pkcs12 -srcstorepass "SourceStorePasword” -destkeystore "C:\HomesiteJKS\BungalowFinal.jks" -deststoretype JKS -storepass "JKSPassword"

  5. Повторите вышеописанный шаг для всех остальных сертификатов путем изменения требуемого значения параметров,
  6. После того, как у нас есть окончательный JKS, мы можем начать изменять пароль для каждого из CERT в JKS и сделать его таким же, как пароль JKS (keystore). Смотрите следующую команду:

    keytool -keypasswd -alias " AppName_Environment" -keystore “C:\JKS\Final.jks"

    Примечания для шага 6: Он попросит вас ввести пароль хранилища ключей, существующим сертификат пароль, новый пароль и повторите новый пароль

  7. Повтори этот шаг для всех записей CERT из JKS файла иметь JKS пароль для всех
  8. сертификатов
  9. Теперь мы можем использовать этот файл и добавить ниже записей в system.properties из JMeter: javax.net.ssl.keyStore=C:/JKS/Final.jks

    javax.net.ssl.keyStorePassword=JKSPassword

  10. Добавьте ниже запись либо в user.properties или jmeter.properties из JMeter, который позволит нам использовать несколько из JKS сертификаты файла:

    https.use.cached.ssl.context=false

  11. реализация запроса Изменить Http в HttpClient4
  12. Добавить конфигурационный элемент Keystore к тесту JMeter с приведенными ниже значениями:

    a. Предварительная нагрузка: True

    b. Идентификатор сертификата с переменным именем: CertAlias ​​

    c. Alias ​​Начальный индекс: 0

    d. Алиас конечный индекс: 10000

  13. JMeter определяемые пользователем переменные должны быть CertAlias ​​с требуемым именем псевдонима
  14. Весь набор, и мы должны иметь возможность запускать скрипт на различных прикладных средах, загрузив конкретного сертификата с именем псевдонима
2

Я не совсем понимаю, почему вам нужно использовать 2 разных хранилища ключей, так как Keystore Configuration предоставляет возможность использования нескольких сертификатов.

Цитата документации:

To make JMeter use more than one certificate you need to ensure that:

  • https.use.cached.ssl.context=false is set in jmeter.properties or user.properties

  • You use either HTTPClient 4 (ADVISED) or HTTPClient 3.1 (DEPRECATED SINCE 3.0) implementations for HTTP Request

Если по какой-либо причине вам еще нужно использовать 2 хранилища ключей, а не 2 сертификата от одного хранилища ключей, к сожалению, нет никакого способа для выполнения тестового элемента Beanshell (или что-нибудь) до инициализации конфигурации Keystore.

Однако вы должны иметь возможность принудительно выполнить повторную инициализацию из сценария 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(); 

См How to Use BeanShell: JMeter's Favorite Built-in Component статью для предварительной информации о Beanshell сценариев в JMeter.

+0

Я создал файл JKS, импортируя оба сертификата. – rkkreddy

+0

Я создал файл JKS, импортируя оба сертификата. Все три пароля отличаются друг от друга - cert 1, cert 2 и файл JKS. Не уверен, что это проблема. У меня есть https.use.cached.ssl.context = false', добавленный в jmeter.properties. Я также использовал HttpClient4 для реализации. Когда я пытаюсь использовать сертификаты из файла JKS с помощью конфигурации Keystore с псевдонимом, я вижу ошибку: 'meter.util.SSLManager: проблема загрузки keystore: невозможно восстановить ключ java.security.UnrecoverableKeyException: невозможно восстановить ключ \t на солнце .security.provider.KeyProtector.recover (Неизвестный источник) ' – rkkreddy

+0

Скорее всего, конфигурация хранилища ключей неверна –