sslhazelcastboringssl

What is the correct config settings to use BoringSSL with Hazelcast IMDG?


I am running Hazelcast as a cache service, it seems I can improve perf with BoringSSL and this is simpler because I don't need to install additional software

Reading their doc: https://docs.hazelcast.com/imdg/4.1.2/security/integrating-openssl.html

I see that I just need two jars, but I don't see any mention of config settings. Do I just use the Java SSL settings with BasicSSLContextFactory?

I see I can use com.hazelcast.nio.ssl.BasicSSLContextFactory as mentioned here https://docs.hazelcast.com/imdg/4.1.2/security/tls-ssl.html#tlsssl-for-hazelcast-members for the Java SSL implementation

They also provide com.hazelcast.nio.ssl.OpenSSLEngineFactory for OpenSSL integration (https://docs.hazelcast.com/imdg/4.1.2/security/integrating-openssl.html#using-openssl)


Solution

  • Starting with Hazelcast version 4.0, there is the following logic deciding which TLS engine is used:

    Surely, you don't need to use the defaults, but you can specify the factory-class-name configuration attribute with the factory of your choice.

    You can use the same properties in OpenSSLEngineFactory like the ones in BasicSSLContextFactory (e.g. keyStore*, trustStore*). Nevertheless, the native way of configuring the OpenSSLEngineFactory is by using keyFile and other properties mentioned in the documentation section about OpenSSL.

    Why the Java 11 check

    As mentioned above, the OpenSSLEngineFactory is not used for Java 11 and newer by default. This decision was based on Hazelcast performance testing which shows OpenSSL performance benefits when used with Java 8, but not with Java 11 (or newer).

    Here are throughput graphs from those tests (performed in 2019).

    TLSv1.2 TLS 1.2

    TLSv1.3 TLS 1.3