2016-06-21 20 views
1

Wir haben 2 Umgebungen und für jede haben wir eine Zertifikat-PFX-Datei. Ich habe versucht, diese 2 Zertifikate zu importieren, um eine JKS/P12-Datei zu erstellen, und habe versucht, basierend auf dem Aliasnamen auf cert zuzugreifen. Obwohl ich 2 Einträge mit dem Befehl keytool -list -v -keystore "C:/yyyyy/xxxx.jks" -storepass "kdjfkdjfkdjf" > "C:/KeyStoreContents.txt" sehen kann, kann ich nicht auf das Zertifikat zugreifen und sehe den Fehler 'Alias ​​nicht gefunden'.JMeter - Einstellung von javax.net.ssl.keyStore und javax.net.ssl.keyStorePassword basierend auf der Anwendungsumgebung

Ich habe eine Möglichkeit, die Werte von javax.net.ssl.keyStore und javax.net.ssl.keyStorePassword basierend auf der Anwendungsumgebung zu setzen?

ich versuchte, sie in Beanshell Pre-Prozessor zu setzen mit:

System.setProperty("javax.net.ssl.keyStore","C:/yyyyy/" + pOneTwoName + ".p12"); 
System.setProperty("javax.net.ssl.keyStorePassword", pOneTwoPwd); 

es auch nicht funktioniert.

Ich versuchte auch ${__P(javax.net.ssl.keyStore, C:/yyyyyy/QA.p12)} und ${__setProperty(javax.net.ssl.keyStore, C:/yyyyyy/QA.p12)} und keiner der oben genannten funktioniert.

Gibt es eine Möglichkeit, diese Werte dynamisch zu laden, bevor Keystore Configuration Element ausgeführt wird?

+0

Sollte nicht notwendig sein. Was war die Ausgabe von 'keytool -list'? – EJP

Antwort

1

Ich bin in der Lage dieses Problem mit den folgenden Schritten zu lösen:

  1. Holen Sie sich alle certs (pfx) für die Anwendungsumgebungen
  2. Optional: Ändern Sie die Erweiterung der Dateien auf p12
  3. Legen Sie einen aussagekräftigen Alias-Namen auf diese certs mit dem unten stehenden Befehl:

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

    Hinweise für Schritt 3:

    a. Möglicherweise werden Sie aufgefordert, keypass einzugeben, und wir können den Store Pass eingeben

    b. Auch wenn wir Großbuchstaben im Aliasnamen angeben, wird der Text in Kleinbuchstaben umgewandelt und als Aliasname festgelegt.

    c.Hier folgte ich dieser Alias-Namenskonvention: application name_environment name wie in JMeter

  4. genannt Importieren Sie die Zertifikate in eine JKS-Datei und wir können jedes Passwort auf JKS setzen und müssen nicht gleich sein wie cert. Siehe unten stehende Befehl:

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

  5. Wiederholen Sie den obigen Schritt für die gesamte verbleibende certs von den gewünschten Parameter
  6. Werte ändern
  7. Nachdem wir die letzten JKS haben, können wir Passwort beginnen für jeden der cert Wechsel in JKS und machen Sie dasselbe wie JKS (Keystore) Passwort. Siehe unten stehende Befehl:

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

    Hinweis für Schritt 6: Es wird Sie fragen Schlüsselspeicher Passwort eingeben, neues Passwort bestehende cert Kennwort ein, und wiederholen neues Passwort

  8. Wiederholen Sie diesen Schritt für die alle cert Einträge von JKS-Datei JKS Passwort für alle certs
  9. Jetzt haben wir diese Datei verwenden können und unter Einträge in system.properties von JMeter hinzufügen: javax.net.ssl.keyStore=C:/JKS/Final.jks

    javax.net.ssl.keyStorePassword=JKSPassword

  10. Fügen Sie den folgenden Eintrag entweder in user.properties oder jmeter.properties von JMeter, die uns mehrere Zertifikate aus JKS-Datei verwenden können:

    https.use.cached.ssl.context=false

  11. ändern Http Antrag Implementierung HttpClient4
  12. Hinzufügen des Keystore-Konfigurationselements zum JMeter-Test mit den folgenden Werten:

    a. Vorspannung: Wahr

    b. Name des Variablennamen-Zertifikats: CertAlias ​​

    c. Alias ​​Startindex: 0

    d. Alias ​​End Index: 10000

  13. JMeter benutzerdefinierte Variablen CertAlias ​​mit dem gewünschten Alias-Namen
  14. Alle gesetzt haben müssen, und wir sollten das Skript auf verschiedenen Anwendungsumgebungen laufen können durch das Laden insbesondere cert mit Alias-Namen
2

Ich verstehe nicht wirklich, warum Sie 2 verschiedene Keystores verwenden müssen, da Keystore Configuration bietet die Möglichkeit, mehrere Zertifikate zu verwenden.

Zitat von der Dokumentation:

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

Wenn Sie aus irgendeinem Grund noch 2 Schlüsselspeicher verwenden müssen, nicht zwei Zertifikate von einem Schlüsselspeicher, leider gibt es keine Möglichkeit, ein Beanshell Testelements (oder irgendetwas auszuführen) vor der Initialisierung der Keystore-Konfiguration.

Allerdings sollten Sie in der Lage sein, die erneute Initialisierung von Beanshell-Skript zu erzwingen.

Beispielcode:

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(); 

Siehe How to Use BeanShell: JMeter's Favorite Built-in Component Artikel für erweiterte Informationen über Beanshell Scripting in JMeter.

+0

Ich habe eine JKS-Datei erstellt, indem ich beide Zertifikate importiert habe. – rkkreddy

+0

Ich habe eine JKS-Datei erstellt, indem ich beide Zertifikate importiert habe. Alle drei Passwörter sind unterschiedlich - cert 1, cert 2 und JKS-Dateien. Nicht sicher, ob dies das Problem ist. Ich habe 'https.use.cached.ssl.context = false' zu jmeter.properties hinzugefügt. Ich habe auch HttpClient4 für die Implementierung verwendet. Wenn ich versuche, die certs aus JKS-Datei mit Keystore-Konfiguration mit Alias-Namen zu verwenden, sehe ich den Fehler: 'meter.util.SSLManager: Problem beim Laden Keystore: Kann Schlüssel nicht wiederherstellen java.security.UnrecoverableKeyException: Kann Schlüssel \t bei Sonne nicht wiederherstellen .security.provider.KeyProtector.recover (Unbekannte Quelle) ' – rkkreddy

+0

Die wahrscheinlichste Keystore-Konfiguration ist falsch –