Java SDK 17.4.0
Released on Aug 25, 2026
New Features
KSM-531: Added HTTP/HTTPS proxy support. All SDK connections (secret queries, file upload, file download) can now route through a proxy.
New
proxyUrloption onSecretsManagerOptions, plusSecretsManagerOptions.withProxy(storage, proxyUrl)for Java callers.Precedence: explicit
proxyUrl, thenhttps.proxyHost/https.proxyPort, thenHTTPS_PROXY/https_proxy.NO_PROXYandhttp.nonProxyHostsexclusions are honored.HTTP_PROXYis ignored since all KSM traffic is HTTPS.Authenticated proxies use
http://user:pass@host:port. A 407 raises a typedSecretsManagerExceptionnaming thejdk.http.auth.tunneling.disabledSchemesJVM flag most applications need to set before making any other HTTP/HTTPS call.New options-taking overloads
downloadFile(options, file)anddownloadThumbnail(options, file)honorproxyUrl,allowUnverifiedCertificate, and the configured timeouts; the single-argument forms are unchanged.
KSM-1176: Added
isEditabletoKeeperRecord, forwarded from the server response envelope, so callers can check write permission before callingupdateSecret.
Security
KSM-1203: Fixed
generatePassword's final character shuffle using KotlinRandom.Defaultinstead of a cryptographic source. It now usesSecureRandom.KSM-1207: Fixed
HttpsURLConnectioncalls (queries, upload, download) having no timeout, allowing an indefinite hang. AddedconnectTimeoutMillis(5s default) andreadTimeoutMillis(30s default) toSecretsManagerOptions.KSM-1248: Server-supplied key IDs are now validated against the embedded public key table before being persisted; an unrecognized ID is rejected instead of overwriting stored key state. Key rotation retries are capped at 3.
KSM-1262: Config and cache files are now written via an atomic temp-file swap with 0600 permissions set before data is written, closing the window where another local user could read the file mid-write.
Bug Fixes
KSM-1081: Fixed
getFolders()crashing when any folder in the response has a corrupted or missing key. Undecryptable folders are now skipped; the rest are returned normally.KSM-1086: Fixed
deleteFolder()returning the wrong response type. It now returnsSecretsManagerDeleteFolderResponsewith per-folder status, matchingdeleteSecret(). Both calls now surface per-item server failures to the caller.KSM-1270: Fixed
getSharedFolderKey()looping forever when server folder data contains a parent cycle. The affected folders are now skipped instead.
Breaking Changes
deleteFolder()return type. Now returnsSecretsManagerDeleteFolderResponseinstead ofSecretsManagerDeleteResponse. Callers that read.recordsmust switch to the new type's.folderslist. In practice no working code is affected: the old type required arecordsfield the backend never sent, so every previous call threwMissingFieldExceptionrather than returning a value.Widened constructors, bytecode-level only.
KeeperRecordandSecretsManagerOptionsgained constructor parameters. Java callers keep every 17.3.0 constructor form via@JvmOverloads, but Kotlin code compiled against 17.3.0 throwsNoSuchMethodErrorif the 17.4.0 jar is swapped in without recompiling. Rebuild dependents rather than replacing the jar in place.
Resources
Last updated

