Releases: pingidentity/ldapsdk
UnboundID LDAP SDK for Java 6.0.8
We have just released version 6.0.8 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository.
Note that this is the last release for which the LDAP SDK source code will be maintained in both the GitHub and SourceForge repositories. The LDAP SDK was originally hosted in a subversion repository at SourceForge, but we switched to GitHub as the primary repository a few years ago. We have been relying on GitHub’s support for accessing git repositories via subversion to synchronize changes to the legacy SourceForge repository, but that support is being discontinued. The SourceForge project will continue to remain available for the discussion forum, mailing lists, and release downloads, but up-to-date source code will only be available on GitHub.
You can find the release notes for the 6.0.8 release (and all previous versions) at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes:
-
We added a
DN.getDNRelativeToBaseDN
method that can be used to retrieve the portion of DN that is relative to a given base DN (that is, the portion of a DN with the base DN stripped off). For example, if you provide it with a DN of “uid=test.user,ou=People,dc=example,dc=com
” and a base DN of “dc=example,dc=com
”, then the method will return “uid=test.user,ou=People
”. -
We added
LDAPConnectionPool.getServerSet
andLDAPThreadLocalConnectionPool.getServerSet
methods that can be used to retrieve the server set that the connection pool uses to establish new connections for the pool. -
We updated the
Filter
class to alternative methods with shorter names for constructing search filters from their individual components. For example, as an alternative to calling theFilter.createANDFilter
method for constructing an AND search filter, you can now useFilter.and
, and as an alternative to callingFilter.createEqualityFilter
, you can now useFilter.equals
. The older versions with longer method names will remain available for backward compatibility. -
We added support for encrypted PKCS #8 private keys, which require a password to access the private key. The
PKCS8PrivateKey
class now provides methods for creating the encrypted PEM representation of the key, and thePKCS8PEMFileReader
class now has the ability to read encrypted PEM files. We also updated themanage-certificates
tool so that theexport-private-key
andimport-certificate
subcommands now support encrypted private keys. -
We updated
PassphraseEncryptedOutputStream
to use a higher key factory iteration count by default. When using the strongest available 256-bit AES encryption, it now follows the latest OWASP recommendation of 600,000 PBKDF2 iterations. You can still programmatically explicitly specify the iteration count when creating a new output stream if desired, and we have also added system properties that can override the default iteration count without any code change. -
We added a
PassphraseEncryptedOutputStream
constructor that allows you to provide aPassphraseEncryptedStreamHeader
when creating a new instance of the output stream. This will reuse the secret key that was already derived for the provided stream header (although with newly generated initialization vector), which can be significantly faster than deriving a new secret key from the same passphrase. -
We added a new
ObjectTrio
utility class that can be useful in cases where you need to reference three typed objects as a single object (for example, if you want a method to be able to return three objects without needing to define a new class that encapsulates those objects). This complements the existingObjectPair
class that supports two typed objects. -
We updated the documentation to include RFC 9371 in the set of LDAP-related specifications. This RFC formalizes the process for requesting a private enterprise number (PEN) to use as the base object identifier (OID) for your own definitions (e.g., for use in defining custom attribute types or object classes). The OID-related documentation has also been updated to provide a link to the IANA site that you can use to request an official base OID for yourself or your organization.
-
We updated the documentation to include the latest revisions of draft-howard-gssapi-aead, draft-ietf-kitten-scram-2fa, draft-melnikov-scram-bis, and draft-reitzenstein-kitten-opaque in the set of LDAP-related specifications.
UnboundID LDAP SDK for Java 6.0.7
We have just released version 6.0.7 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
-
We fixed a bug in the
SearchResultEntry.equals
method that could prevent aSearchResultEntry
from matching other types ofEntry
objects. -
We fixed a bug in the
Entry.applyModifications
method that could cause it to fail with aNOT_ALLOWED_ON_RDN
result if the provided entry was missing one or more of the attribute values used in its RDN. -
We fixed a bug in the argument parser’s support for mutually dependent arguments with a set containing more than two arguments. Previously, the constraint would have been satisfied if at least two of the arguments were provided, rather than requiring all of them to be provided.
-
We added
JSONObject
methods for retrieving fields by name using case-insensitive matching (by default, JSON field names are treated in a case-sensitive manner). Because it is possible that a JSON object will have multiple fields with the same name when using case-insensitive matching, there are a few options for indicating how such conflicts should be handled, including only returning the first match, returning a map with all matching fields, or throwing an exception if there are multiple matches. -
We updated the set of LDAP-related specifications to include the latest version of the draft-schmaus-kitten-sasl-ht proposal.
UnboundID LDAP SDK for Java 6.0.6
We have just released version 6.0.6 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
General Updates
-
We fixed an issue that could cause request failures when closing a connection operating in asynchronous mode with outstanding operations.
-
We fixed an issue that could interfere with the ability to get a default
SSLContext
on Java 17 when running in FIPS 140-2-compliant mode. -
We updated
LDAPConnectionOptions
to add support for a new system property that can enable certificate hostname verification by default without any code changes. -
We updated the LDAP command-line tool framework to add a new
--verifyCertificateHostnames
argument to enable hostname verification when performing TLS negotiation. -
We improved the class-level Javadoc documentation for the
SSLUtil
class to provide a better overview of TLS protocol versions, TLS cipher suites, key managers, trust managers, and certificate hostname verification, and to provide better examples that illustrate best practices for establishing secure connections. -
We fixed an issue in the JNDI compatibility support for controls, as well as extended requests and responses. Even though the implementation was based on the JNDI documentation, it appears that at least OpenJDK implementations do not abide by that documentation. The LDAP SDK is now compatible with the observed behavior rather than the documentation, although a system property can be used to revert to the former behavior.
-
We updated the
SearchRequest
class to add constructors that allow you to provide the search base DN with aDN
object (as an alternative to existing constructors that allow you to specify it as aString
). -
We fixed an issue in the command-line tool framework in which an
Error
(for example,OutOfMemoryError
) could cause the tool to report aNullPointerException
rather than information about the underlying error. -
We fixed an issue in the IA5 argument value validator that could allow it to accept argument values with non-ASCII characters.
-
We fixed an issue in the DNS hostname argument value validator that could prevent it from properly validating the last component of a fully qualified domain name, or the only component of an unqualified name.
-
We updated the
identify-references-to-missing-entries
tool to provide an option to generate an LDIF file with changes that can be used to remove identified references. -
We updated the
SelfSignedCertificateGenerator
class to perform better validation for the subject alternative DNS names that it includes in a certificate. -
We updated the
manage-certificates generate-self-signed-certificate
command to rename the--replace-existing-certificate
argument to be--use-existing-key-pair
. The former argument name still works, but it is hidden from the usage. -
We included a
native-image/resource-config.json
file in the LDAP SDK jar file manifest, which can be used by the GraalVMnative-image
tool to ensure that appropriate resource files are included in the resulting image.
Updates Specific to Use With the Ping Identity Directory Server
-
We updated the
summarize-access-log
tool to report on many more things, including the most common IP addresses for failed bind attempts, the most consecutive failed binds, information about work queue wait times, information about request and response controls, the number of components in search filters, and search filters that may indicate injection attempts. -
We updated support for the audit data security administrative task to make it possible to specify the number and/or age of previous reports to retain.
-
We fixed issues that prevented specifying the criticality of the administrative operation and join request controls.
UnboundID LDAP SDK for Java 6.0.5
We have just released version 6.0.5 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
General Updates:
-
We fixed an issue that could occasionally cause the LDAP SDK to hide the actual cause of a StartTLS failure by using information from a second, less useful exception.
-
We fixed an issue that could cause the
ldifsearch
tool to display a malformed message when the first unnamed trailing argument was expected to be a search filter but could not be parsed as a valid filter. -
We improved support for validating and comparing values using the telephone number syntax. Previously, we used a loose interpretation of the specification, which would consider any printable string (including strings without any digits) to be valid, and would only ignore spaces and hyphens when comparing values. You can now configure varying levels of strictness (either programmatically or using system properties), including requiring at least one digit or strict conformance to the X.520 specification. You can also configure it to ignore all non-digit characters when comparing values, and this is now the default behavior.
-
We fixed a bug in which the
ldapcompare
tool did not properly close its output file if one was configured. The output file does get automatically closed when the tool exits so it’s not an issue when runningldapcompare
from the command line, but this can cause problems if the tool is invoked programmatically from another application. -
We fixed an issue with the tool properties file created using the
--generatePropertiesFile
argument in command-line tools that support it. The generated properties file did not properly escape backslash, carriage return, line feed, or form feed characters.
Updates Specific to Use With the Ping Identity Directory Server:
-
We added support for encoding controls to JSON objects, and for decoding JSON objects as controls. There is a generic JSON representation that will work for any type of control (in which the value is provided as the base64-encoded representation of the raw value used in the LDAP representation of the control), but most controls provided as part of the LDAP SDK also support a more user-friendly representation in which the components of the value are represented in a nested JSON object.
-
We added client-side support for a new JSON-formatted request control that can be used to send request controls to a Ping Identity Directory Server with the controls encoded as JSON objects rather than a raw LDAP representation. We also added support for a JSON-formatted response control that can be used to receive JSON-encoded response controls from the server.
-
We updated the ldapsearch and ldapmodify command-line tools to add a
--useJSONFormattedRequestControls
argument that will cause any request controls to be sent using a JSON-formatted request control, and it will cause any response controls returned by the server to be embedded in a JSON-formatted response control. -
We fixed an issue with the way that the
parallel-update
tool created assured replication request controls when an explicit local or remote assurance level was specified. Previously, it would only specify a minimum assurance level without specifying a maximum level, which could cause the server to use a higher assurance level than requested by the client. -
We updated the topology registry trust manager to allow trusting a certificate chain if either the peer certificate or any of its issuers is found in the server’s topology registry. Previously, it would only trust a certificate chain if the peer certificate itself was found in the topology registry, and having an issuer certificate was not sufficient. The former behavior is still available with a configuration option.
-
We updated the topology registry trust manager to make it possible to ignore the certificate validity window for peer and issuer certificates. The validity window is still respected by default, but if the trust manager is configured to ignore it, then a certificate chain may be trusted even if the peer or an issuer certificate is expired or not yet valid.
UnboundID LDAP SDK for Java 6.0.4
We have just released version 6.0.4 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
General Updates:
-
We fixed an issue with the
Filter.matchesEntry
method that could cause it to throw an exception rather than returning an appropriate Boolean result when evaluating an AND or an OR filter in which one of the nested elements used inappropriate matching (for example, if the assertion value did not conform to the syntax for the associated attribute type). -
We fixed an issue with the way that decodeable controls are registered with the LDAP SDK. Under some circumstances, a thread could become blocked while attempting to create a new control.
-
We updated the JVM-default trust manager to properly check for the existence of a “
jssecacerts
” trust store file in accordance with the JSSE specification. It had previously only looked for a file named “cacerts
”. -
We updated the logic used to select the default set of supported cipher suites so that it will no longer exclude suites with names starting with “SSL_” by default on JVMs with a vendor string that includes “IBM”. IBM JVMs appear to use the “SSL_” prefix for some or all cipher suites, including those that are not associated with TLS protocols rather than a legacy SSL protocol. We also added a
TLSCipherSuiteSelector.setAllowSSLPrefixedSuites
method that can be used to override the default behavior. -
We updated the LDIF reader to support reading modifications with attribute values read from a file referenced by URL. This was previously supported when reading LDIF entries or add change records, but it had been overlooked for LDIF modify change records.
-
We updated the LDIF reader so that it no longer generates comments attempting to clarify the contents of base64-encoded values if the value is longer than 1,000 bytes.
-
We updated the documentation to include the latest versions of the draft-behera-ldap-password-policy, draft-coretta-x660-ldap, and draft-ietf-kitten-scram-2fa specifications.
Updates Specific to Use With the Ping Identity Directory Server:
-
We added a new API for parsing access log messages generated by the server. The new API supports both text-formatted and JSON-formatted log messages, whereas the previous version only supported messages in the default text (“name=value”) format.
-
We updated the
summarize-access-log
tool (which can be used to perform basic analysis of server access log files) to add support for JSON-formatted log files. -
We added support for retrieving and parsing X.509 certificate monitor entries.
-
We added client-side support for an administrative task that can cause the server to immediately refresh any cached certificate monitor data. The server will automatically refresh the cache every minute, but the task can be used to cause an immediate refresh.
UnboundID LDAP SDK for Java 6.0.3
We have just released version 6.0.3 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
General Updates:
-
We fixed an issue with the round-robin server set that could cause it to select some servers with a higher frequency than others in the event that one or more of the servers become unavailable.
-
We fixed a potential race condition that could leave a background
Timer
thread running if a connection was closed while waiting for a response to a request issued via the asynchronous API. -
We fixed an issue in which the in-memory directory server could incorrectly include a matched DN in certain bind response messages.
-
We improved support for SSL/TLS debugging for SSLUtil operations when used in conjunction with the
javax.net.debug
system property. -
We added methods to the
JSONLDAPResultWriter
class that can be used to encode entries, search result references, and LDAP results to JSON objects. -
We added a
CryptoHelper.inferKeyStoreType
method that attempts to determine the key store type for a specified file that is expected to represent a JKS, PKCS12, or BCFKS key store. -
We added
StaticUtils
convenience methods for generating random bytes, integers, and strings, optionally using cryptographically secure random number generators. -
We updated the documentation to add draft-melnikov-scram-bis and to update draft-melnikov-scram-sha-512 and draft-melnikov-scram-sha3-512 in the set of LDAP-related specifications.
Updates Specific to Use With the Ping Identity Directory Server:
-
We fixed an issue that could cause the
manage-account
tool to fail if it receives a response with an unrecognized password policy state operation type. This is most likely to occur when the tool is communicating with a version of the Ping Identity Directory Server that does not correspond to the version of themanage-account
tool. -
We added client-side support for new extended operations that can allow for remote management of certificates in Ping Identity Directory Server instances.
-
We updated the
AuthenticationFailureReason
class to add additional failure reason values related to pass-through authentication. -
We updated the
TaskManager
class to add methods for usingLDAPInterface
objects (including connection pools or Server SDK internal connections) as an alternative toLDAPConnection
objects when interacting with administrative tasks.
UnboundID LDAP SDK for Java 6.0.2
We have just released version 6.0.2 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
-
We fixed an issue in the JVM-default trust manager that could prevent it from properly trusting a certificate chain that should be considered valid through a cross-signed relationship, which may include certificates signed by the Let’s Encrypt service in some cases. Although the trust manager provided support for cross-signed certificates, that support would previously only be used if one or more of the certificates in the presented chain were outside of their current validity window.
-
We added the ability to use the tls-server-end-point channel binding type when authenticating with the GSSAPI SASL mechanism. This feature depends on the underlying JVM providing support for this channel binding type and will likely require Java 13 or later.
-
We fixed an issue in the in-memory directory server that could prevent it from returning search result references for smart referral entries within the scope of the search. It would previously only return references for smart referral entries that matched the search filter, but will now return references for any smart referral entry within the scope.
-
We updated the LDAP command-line tool framework to add a
--defaultTrust
argument that can be used to indicate that the tool should use a default set of non-interactive logic for determining whether to trust a presented certificate chain. This includes at least the JVM’s default trust store, but in tools that are part of a Ping Identity server installation, it may also include the server’s default trust store and the topology registry. This is the same logic that tools would previously use when invoked without any trust-related arguments, with the exception that it will not interactively prompt about whether to trust the presented chain if it cannot be trusted through any of the default mechanisms. As such, it is more suitable for use in scripts that are intended to run in non-interactive settings. -
We updated the documentation to include the latest revision of draft-ietf-kitten-password-storage in the set of LDAP-related specifications.
UnboundID LDAP SDK for Java 6.0.1
We have just released version 6.0.1 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes included in this version:
-
We added a new
ldap-diff
command-line tool that can be used to compare the contents of two LDAPv3 servers. Any differences identified will be written to a specified file as LDIF change records that may be used to update the source server to match the target server. The tool attempts to minimize the memory required to perform the comparison, and it can use multiple passes to avoid potential false positives that result from delays in replication or changes made while the tool is running. -
We updated the
ldifsearch
tool to provide support for presenting the results in alternative output formats. It now supports the same formats as ldapsearch, including LDIF, JSON, CSV (single-valued and multi-valued), tab-delimited text (single-valued and multi-valued), DNs only, and values only. -
We updated the LDIF reader to make it possible to customize the size limit that it imposes for values read from a file referenced by URL. This limit is a safety feature that prevents consuming too much memory when encountering a reference to a very large file, but the size limit was previously hard-coded to be 10 megabytes. That is still the default, but it’s now possible to use the
com.unboundid.ldif.LDIFReader.maxURLFileSizeBytes
system property to set an alternative limit. -
We augmented the LDAP SDK’s debugging support to make it possible to automatically have debug messages written to a file specified by the
com.unboundid.ldap.sdk.debug.file system property
. This is intended to be used in conjunction with other debugging-related system properties to enable support for debugging in existing applications without the need for a code change. -
We lowered the debug level for exception messages that may be logged as a result of a
SocketTimeoutException
that is caught internally in the course of trying to determine whether a connection in a connection pool is still valid. This is a completely normal condition that was previously inadvertently logged at aWARNING
level. This could potentially mislead people into thinking that it’s a problem, or at the very least make it harder to find debug messages that are actually important. It is now logged at theFINEST
level, so it will only be visible at the highest level of verbosity. -
We updated support for the Ping Identity Directory Server’s matching entry count control to make it possible to request extended response data, including whether the search is fully indexed, whether identified candidate entries are known to be included in the scope of the search, and any remaining portion of the filter that was not used in the course of building the set of candidate entries.
-
We updated support for the Ping Identity Directory Server’s generate profile administrative task to clarify that all included paths must be relative rather than absolute. Those paths will be treated as relative to the server root, and relative paths that reference portions of the filesystem outside the server root will not be allowed.
-
We updated the documentation to include the latest revision of draft-coretta-x660-ldap in the set of LDAP-related specifications.
UnboundID LDAP SDK for Java 6.0.0
We have just released version 6.0.0 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository.
One of the biggest changes that we’ve made in this release is that we’ve deprecated support for the TLSv1 and TLSv1.1 protocol versions in accordance with RFC 8996. By default, the LDAP SDK will prefer using TLSv1.3, but it can fall back to using TLSv1.2 if the newer protocol is not supported by the client JVM or by the directory server. The older TLSv1 and TLSv1.1 protocol versions can still be enabled if necessary (either programmatically or by setting system properties), but given that they are no longer considered secure, and given that TLSv1.2 became an official standard over twelve years ago, the far better option would be to use a directory server release from sometime in the last decade.
We have also updated the set of TLS cipher suites that the LDAP SDK will use by default. The default set of enabled cipher suites no longer includes those that rely on the SHA-1 message digest algorithm (which is no longer considered secure) or those that rely on RSA key exchange (which doesn’t support forward secrecy and could allow an observer to decrypt the communication if the server certificate’s private key becomes compromised; note that deprecating RSA key exchange doesn’t affect the ability to interact with servers that use certificates with RSA key pairs). If necessary, you can override the set of cipher suites that the LDAP SDK uses by default, either programmatically or with system properties.
You can find the complete release notes at https://docs.ldap.com/ldap-sdk/docs/release-notes.html. Other notable changes in this release include:
-
We fixed an issue that could cause the LDAP SDK to use the set of TLS cipher suites enabled in the JVM by default rather than a recommended set identified by the LDAP SDK itself. This could potentially result in using weaker encryption for secure connections.
-
We updated the logic that the LDAP SDK uses when deciding which characters to escape when generating the string representation of a DN or RDN. Previously, it would always escape all non-ASCII characters. Now, the LDAP SDK will no longer escape non-ASCII characters that it believes are displayable (including the Unicode letter, number, punctuation, and symbol character types). If desired, you can override this behavior either programmatically or with a system property.
-
We updated the logic that the LDAP SDK uses when deciding which data should be base64-encoded when generating the LDIF representation of an entry. Previously, it would not always base64-encode data with ASCII control characters (other than NUL, LF, and CR, which must always be base64-encoded). Now, it will always base64-encode values with ASCII control characters by default. It can also be configured to optionally not base64-encode values with non-ASCII characters (which technically violates the LDIF specification but may be useful when displaying to an end user). You can override the LDAP SDK’s base64-encoding strategy either programmatically or with a system property.
-
We updated the LDIF reader to make it possible to disable support for parsing LDAP controls. By default, the LDAP SDK supports LDIF change records that include LDAP controls as described in RFC 2849. However, this can cause a problem in a rare corner case if a record represents an entry rather than a change record and the first attribute in the LDIF representation of that entry is named “
control
”. If you attempt to read that record as a generic LDIF record or as a change record withdefaultAdd
set totrue
(rather than reading it specifically as an entry), then the LDIF reader will attempt to parse that attribute as an LDIF control. If you have LDIF records that represent entries in which the first attribute may be named “control
”, if you are reading them as generic LDIF records or as LDIF change records withdefaultAdd
set to true, and if you don’t have any LDIF change records that legitimately do include LDAP controls, then you can update the LDIF reader to disable support for controls so that it will interpret a leading “control
” element as an attribute rather than a change record with a control. -
We updated
PKCS11KeyManager
to make it easier to use certificate chains stored in PKCS #11 tokens without needing to alter the JVM configuration. Previously, if you wanted to use PKCS #11, you either had to modify a configuration file within the JVM installation (which may not always be feasible), or you had to write your own code to load the provider before trying to use the key manager. You can now supply a provider configuration file when creating a PKCS #11 key manager, and it will ensure that the necessary provider is loaded and registered with the JVM. -
We updated the
manage-certificates
tool to support interacting with PKCS #11 tokens. Previously, the tool only supported certificates in JKS, PKCS #12, and BCFKS key stores. When using a PKCS #11 token, you must use the--keyStore
argument with a value that is the path to the provider configuration file and the--keyStoreFormat
argument with a value ofPKCS11
. -
We updated the
manage-certificates
tool to add a newcopy-keystore
subcommand with support for copying some or all of the information in one key store to another key store of the same or a different type. This can allow you to merge key stores or convert a key store from one type to another (for example, JKS to PKCS #12). -
We updated the
manage-certificates
tool to add optional--output-file
and--output-format
arguments to thegenerate-self-signed-certificate
subcommand. This allows you to generate and export a self-signed certificate in one step rather than requiring a separate command to export a certificate after generating it. -
We updated the
manage-certificates
tool to allow interacting with BCFKS key stores even when the LDAP SDK is not operating in FIPS 140-2-compliant mode. Note that the necessary FIPS-compliant Bouncy Castle libraries must already be in the classpath. -
We updated the
manage-certificates
tool to display the key store type when using thelist-certificates
subcommand. -
We updated the
in-memory-directory-server
command-line tool to add a new--doNotGenerateOperationalAttributes
argument that will prevent the server from maintaining operational attributes likeentryDN
,entryUUID
,subschemaSubentry
,creatorsName
,createTimestamp
,modifiersName
, andmodifyTimestamp
. -
We updated the
FileArgument
class to provide better support for interacting with files that are potentially encrypted or compressed. ThegetFileLines
,getNonBlankFileLines
, andgetFileBytesMethods
have been updated so that they can transparently handle reading from gzip-compressed files. Further, for tools that are running as part of a Ping Identity Directory Server installation, they can transparently handle reading from files that are encrypted with a key from the server’s encryption settings database. Also, a newgetFileInputStream
method has been provided that can retrieve an input stream to use when reading from the target file, including cases in which the file is compressed or encrypted. -
We added a new
ThreadLocalSecureRandom
class that can be used to maintain a set of per-threadSecureRandom
instances that can be used without concerns around synchronization or contention. -
We updated the documentation to include the latest revisions of the draft-coretta-x660-ldap, draft-ietf-kitten-password-storage, and draft-melnikov-scram-2fa drafts in the set of LDAP-related specifications.
Changes specific to running in FIPS 140-2-compliant mode include:
-
We have updated the LDAP SDK so that it will use the Bouncy Castle FIPS-compliant
SecureRandom
instance in hybrid mode, which helps reduce the chance that it will encounter severe performance issues as a result of depleted entropy on the underlying system. However, in some cases, it may still be necessary to either use a hardware random number generator or a software entropy supplementing daemon (like rngd) to prevent blocking due to a lack of entropy. -
We have updated the LDAP SDK to make it possible to customize the set of providers that will be allowed when running in FIPS 140-2-compliant mode. You can perform this customization programmatically or with a system property.
-
We have updated the command-line tool framework to check whether the LDAP SDK is running in FIPS 140-2-compliant mode upon invoking the tool constructor. This can help prevent cases in which the tool may inadvertently perform operations with a non-FIPS-compliant provider.
Changes specific to using the LDAP SDK in conjunction with the Ping Identity Directory Server include:
-
We updated the
collect-support-data
tool to allow using the--keyStoreFormat
and--trustStoreFormat
arguments when invoking the server-side version of the tool. Previously, you could only use these arguments in conjunction with the--useRemoteServer
argument. This change only applies when using the 8.3.0.0 or later release of the Ping Identity Directory Server. -
We added client-side support for a new administrative task that can be used to safely remove an object class definition from the server schema. The task will ensure that the object class is not in use before attempting to remove it, and it will clean up any references to the object class that may no longer be necessary (for exam...
UnboundID LDAP SDK for Java 5.1.4
We have just released version 5.1.4 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository.
The release notes contain a more complete overview of the changes included since the 5.1.3 release, but here’s a quick overview:
-
We fixed an issue with the fewest connections and round-robin server sets that could cause them to leave a background thread running if one of the servers it had been using goes away permanently.
-
We updated the TLS cipher suite selector to improve compatibility with JVMs (like the one provided by IBM) that use an “SSL_” prefix for all cipher suite names, rather than using “TLS_” for suites associated with the TLS protocol and only using “SSL_” for suites associated with legacy SSL protocols.
-
We have updated the TLS cipher suite selector to improve the order in which it returns the names of the recommended suites.
-
We have added new key and trust manager implementations that can use X.509 certificates and PKCS #8 private keys read from PEM files. We have also added new utility classes for reading certificates and private keys from PEM files.
-
We updated the LDAP SDK to support running in a FIPS 140-2-compliant mode using the Bouncy Castle FIPS provider (and the associated JSSE provider). The Bouncy Castle libraries are not provided as part of the LDAP SDK, but if they are separately obtained and included in the classpath, then the LDAP SDK can be configured to operate in a FIPS-compliant manner.
-
We have updated the
manage-certificates
tool to support managing certificates in BCFKS (the Bouncy Castle FIPS-compliant key store format) files. -
We have updated the TLS cipher suite selector to exclude suites that rely on the SHA-1 digest algorithm from the recommended set of suites when running in FIPS-compliant mode.
-
We improved an error message that could be used in an exception if a connection becomes invalid in the course of trying to send a request to the server.
-
We updated the
ldifmodify
command-line tool to allow ignoring duplicate attempts to delete the same entry, and attempts to delete or modify entries that do not exist in the LDIF file. -
We have updated support for the proprietary get user resource limits request control to allow clients to request that the server not return information about the user’s group membership in the response control. This can help improve performance when using the control, especially in servers with large numbers of dynamic groups.
-
We have updated the LDAP SDK documentation to include the latest versions of draft-coretta-x660-ldap and draft-ietf-kitten-password-storage in the set of LDAP-related specifications.