apache / apache/jmeter

Could not create script recorder - see log for details: Cannot find keytool application and no keystore was provided

Open
#5,882 3 comments 0 reactions 0 assignees View on GitHub
invalid need info
Dominant language
Java
Stars
9.5k
Forks
2.3k
Avg merge
1d 22h
Merged PRs (30d)
5

Description

### Expected behavior

Able to re-generate the Apache certificate successfully

### Actual behavior

Run into this error "could not create script recorder - see log for details: Cannot find keytool application and no keystore was provided" when I hit the Start button in the Test Script Recorder

### Steps to reproduce the problem

1. Java JDK 20 and JMeter are installed on Windows 10
2. Apache.JMeterTempraryRootCA certificate is missing from the apache-jmeter-5.5\bin after JMeter 5.5 is installed
3. System path is set properly as %JAVA_HOME%\bin.
5. "Java -version", "keytool" commands can run in CMD successfully to prove System path is ok
6. I followed this video https://www.youtube.com/watch?v=p-Wv_QEVFg4&list=PLU62LFwq2qWHB7_9nBXVQyJ3vGKkW2zDN&index=9 to re-generate the certificate. However, after numerous attempts (including Java, JMeter reinstall, System Properties configuration), I always run into this error "could not create script recorder - see log for details: Cannot find keytool application and no keystore was provided" when I hit the Start button in the Test Script Recorder (see attached screenshot below)
7. Logs are captured as below
2023-05-05 21:23:04,416 INFO o.a.j.s.FileServer: Default base='C:\Tools\apache-jmeter-5.5\bin'
2023-05-05 21:23:04,426 INFO o.a.j.g.a.Load: Loading file: C:\Users\caiz\Desktop\JMeter\HTTP(S) Test Script Recorder.jmx
2023-05-05 21:23:04,427 INFO o.a.j.s.FileServer: Set new base='C:\Users\caiz\Desktop\JMeter'
2023-05-05 21:23:04,985 INFO o.a.j.s.SaveService: Testplan (JMX) version: 2.2. Testlog (JTL) version: 2.2
2023-05-05 21:23:05,032 INFO o.a.j.s.SaveService: Using SaveService properties version 5.0
2023-05-05 21:23:05,032 INFO o.a.j.s.SaveService: Using SaveService properties file encoding UTF-8
2023-05-05 21:23:05,032 INFO o.a.j.s.SaveService: Loading file: C:\Users\caiz\Desktop\JMeter\HTTP(S) Test Script Recorder.jmx
2023-05-05 21:23:05,217 ERROR o.a.j.e.KeyToolUtils: Unable to find keytool application. Check PATH or define system property keytool.directory
2023-05-05 21:23:05,396 INFO o.a.j.s.FileServer: Set new base='C:\Users\caiz\Desktop\JMeter'
2023-05-05 21:23:13,248 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must contain the string: '.functions.'
2023-05-05 21:23:13,248 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must not contain the string: '.gui.'
2023-05-05 21:23:13,310 ERROR o.a.j.p.h.p.ProxyControl: Could not initialise key store
java.io.IOException: Cannot find keytool application and no keystore was provided
at org.apache.jmeter.protocol.http.proxy.ProxyControl.initKeyStore(ProxyControl.java:1534) ~[ApacheJMeter_http.jar:5.5]
at org.apache.jmeter.protocol.http.proxy.ProxyControl.startProxy(ProxyControl.java:527) ~[ApacheJMeter_http.jar:5.5]
at org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui.startProxy(ProxyControlGui.java:623) ~[ApacheJMeter_http.jar:5.5]
at org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui.actionPerformed(ProxyControlGui.java:463) ~[ApacheJMeter_http.jar:5.5]
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) ~[?:?]
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314) ~[?:?]
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407) ~[?:?]
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) ~[?:?]
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) ~[?:?]
at com.github.weisj.darklaf.ui.button.DarkButtonListener.mouseReleased(DarkButtonListener.java:72) ~[darklaf-core-2.7.3.jar:2.7.3]
at java.awt.Component.processMouseEvent(Component.java:6620) ~[?:?]
at javax.swing.JComponent.processMouseEvent(JComponent.java:3398) ~[?:?]
at java.awt.Component.processEvent(Component.java:6385) ~[?:?]
at java.awt.Container.processEvent(Container.java:2266) ~[?:?]
at java.awt.Component.dispatchEventImpl(Component.java:4995) ~[?:?]
at java.awt.Container.dispatchEventImpl(Container.java:2324) ~[?:?]
at java.awt.Component.dispatchEvent(Component.java:4827) ~[?:?]
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) ~[?:?]
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) ~[?:?]
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) ~[?:?]
at java.awt.Container.dispatchEventImpl(Container.java:2310) ~[?:?]
at java.awt.Window.dispatchEventImpl(Window.java:2780) ~[?:?]
at java.awt.Component.dispatchEvent(Component.java:4827) ~[?:?]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) ~[?:?]
at java.awt.EventQueue$4.run(EventQueue.java:720) ~[?:?]
at java.awt.EventQueue$4.run(EventQueue.java:714) ~[?:?]
at java.security.AccessController.doPrivileged(AccessController.java:400) ~[?:?]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) ~[?:?]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) ~[?:?]
at java.awt.EventQueue$5.run(EventQueue.java:747) ~[?:?]
at java.awt.EventQueue$5.run(EventQueue.java:745) ~[?:?]
at java.security.AccessController.doPrivileged(AccessController.java:400) ~[?:?]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) ~[?:?]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:744) ~[?:?]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) ~[?:?]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) ~[?:?]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[?:?]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ~[?:?]

![Capture](https://user-images.githubusercontent.com/127338702/236591069-88891b36-1659-47f4-a99e-2ec500bd8cc8.JPG)

### JMeter Version

5.5

### Java Version

jdk-20

### OS Version

Windows 10 Enterprise OS build 19044.2846

Contributor guide

Open the contributing guide

Research direction

Start with KeyToolUtils and org/apache/jmeter/protocol/http/proxy/ProxyControl.java at the reported initKeyStore failure, then review the Test Script Recorder startup path and the keytool.directory message. Reproduce on Windows 10 with JMeter 5.5 and JDK 20; done means the recorder starts and regenerates the Apache certificate without the reported error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
testing, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.