You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hop.apache.org by "fskorgen (via GitHub)" <gi...@apache.org> on 2026/08/21 13:55:43 UTC
[I] [Bug]: REST transform does not decrypt trustStorePassword, unlike every other password field (hop)
fskorgen opened a new issue, #8054:
URL: https://github.com/apache/hop/issues/8054
### Apache Hop version?
2.19
### Java version?
21
### Operating system
Windows
### What happened?
The REST transform reads its trust store password with `resolve()` only, without
`Encr.decryptPasswordOptionallyEncrypted(...)`. Every other password field in Hop — including the
one a dozen lines above it in the very same method — is decrypted after resolving. As a result an
encrypted value that reaches the field through a variable is passed to the trust store loader
verbatim, and the SSL context cannot be built.
### Where
`plugins/transforms/rest/src/main/java/org/apache/hop/pipeline/transforms/rest/Rest.java`, in
`init()` (2.19.0-rc1, lines 2243-2257):
```java
data.realHttpLogin = resolve(meta.getHttpLogin());
data.realHttpPassword =
Encr.decryptPasswordOptionallyEncrypted(resolve(meta.getHttpPassword())); // decrypted
...
data.trustStoreFile = resolve(meta.getTrustStoreFile());
data.trustStorePassword = resolve(meta.getTrustStorePassword()); // not decrypted
```
Both fields are declared the same way in `RestMeta`:
```java
@HopMetadataProperty(key = "httpPassword", injectionKey = "HTTP_PASSWORD", password = true)
private String httpPassword;
@HopMetadataProperty(key = "trustStorePassword", injectionKey = "TRUSTSTORE_PASSWORD", password = true)
private String trustStorePassword;
```
Everywhere else in Hop, a trust store password is decrypted before use:
| Location | Handling |
| --- | --- |
| `plugins/misc/rest/.../metadata/rest/RestConnection.java:566` (same field name, REST connection) | `Encr.decryptPasswordOptionallyEncrypted(resolve(trustStorePassword))` |
| `plugins/databases/oracle/.../OracleDatabaseMeta.java:561` | `decrypt(variables, trustStorePassword)` |
| `plugins/transforms/ldap/.../LdapSslProtocol.java:41` | `Utils.resolvePassword(variables, ...)`, i.e. resolve + decrypt |
| `plugins/transforms/rest/.../Rest.java:2257` | `resolve(...)` only |
### Why it is not visible in the simple case
A password typed straight into the dialog works, because `XmlMetadataUtil` already decrypts
`password = true` properties when the pipeline is deserialized
(`core/src/main/java/org/apache/hop/metadata/serializer/xml/XmlMetadataUtil.java:1211`). The
failure needs the value to arrive *after* deserialization: through a variable, or through metadata
injection.
### Steps to reproduce
1. Encrypt a trust store password: `hop-encrypt.sh -hop mypassword` → `Encrypted 2be98afc86aa7f2e4bb18bd63c99dbdde`
2. Put that string in a variable, for example `REST_TRUSTSTORE_PW`, in `hop-config.json` or the
project variables — the documented way to keep a secret out of plain text.
3. In a REST transform, set an HTTPS URL that needs a custom trust store, set **Trust store file**,
and set **Trust store password** to `${REST_TRUSTSTORE_PW}`.
4. Run the pipeline.
### Expected behaviour
The variable resolves to the encrypted string, the string is decrypted, and the trust store opens —
exactly what happens when the same construct is used for **HTTP password**.
### Actual behaviour
The literal text `Encrypted 2be98afc86aa7f2e4bb18bd63c99dbdde` is passed as the trust store
password. `trustStoreSslContext()` fails with `Rest.Error.IOException`, caused by
`java.io.IOException: keystore password was incorrect`.
The same applies to metadata injection into `TRUSTSTORE_PASSWORD`.
### Suggested fix
One line, matching the sibling field directly above it:
```java
data.trustStorePassword =
Encr.decryptPasswordOptionallyEncrypted(resolve(meta.getTrustStorePassword()));
```
`decryptPasswordOptionallyEncrypted` is a no-op for a value that is not encrypted, so plain-text
passwords keep working unchanged.
### Note
This is long-standing, not a regression — the line has not changed since a code-formatting commit
in 2021. Happy to open a PR if the fix above is acceptable.
### Issue Priority
Priority: 2
### Issue Component
Component: Transforms
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@hop.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] [Bug]: REST transform does not decrypt trustStorePassword, unlike every other password field (hop)
Posted by "hansva (via GitHub)" <gi...@apache.org>.
hansva closed issue #8054: [Bug]: REST transform does not decrypt trustStorePassword, unlike every other password field
URL: https://github.com/apache/hop/issues/8054
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@hop.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] [Bug]: REST transform does not decrypt trustStorePassword, unlike every other password field (hop)
Posted by "hansva (via GitHub)" <gi...@apache.org>.
hansva commented on issue #8054:
URL: https://github.com/apache/hop/issues/8054#issuecomment-5370918563
Feel free to open a PR. This is indeed a bug; you can claim tickets by using the [.]take-issue command (without []).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@hop.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org