Pre-requisites:
- Strategy Intelligence has been upgraded to 2021 Update 6, whose Exasol drivers have been upgraded to 7.1.7
- Exasol db versions 6.2.15+, 7.0.10+ and 7.1.x
Symptom
After Exasol driver upgraded to 7.1.7 along with MSTR m2021 Update 6, TLS is the default cryptographic protocol for all Exasol connections.
Old connection used to work in driver before 7.1.0 will not work in the new driver.
When connecting to your database, you will get an error message similar to this:
java.io.IOException: TLS connection to host (192.168.56.101) failed: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. If you trust the server, connect to it using the fingerprint: 2747B64E34414C293091FF37F428CC8D795B64B7159E50EDD7EA507B58D4FAEA.
CauseAll connections created using Exasol-provided 7.1 drivers will try to establish TLS connections to Exasol per default.
As part of the TLS handshake, the drivers require SSL/TLS certificate used by Exasol to be verified. This is the standard practice that increases the security of connections by preventing man-in-the-middle attacks.
Note, as Exasol driver has higher memory usage for encrypted communication, it might have small impact on performance in some scenarios.
ActionThere are five possible methods to re-establish connection to your database using the latest driver.
- Full, TLS-standard verification (default)
- Fingerprint-based verification
- No verification
- Legacy encryption
- Turn off encryption
Option 3 and Option 5 are not recommended.
1. Standard Verification
1.1 The certificate and the client's corresponding CA certificates are properly configured
This is the standard certificate verification process used by default. The certificate is verified to be valid for the Exasol node (host or IP address check) from which it was received and that the certificate is properly signed by a recognized CA.
If the certificate and the client's corresponding CA certificates are properly configured, then no additional configuration is necessary.
This method provides the highest level of security.
The following table provides the examples for standard verification:
Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N |
Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N |
Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N | Strategy Platform (Early Adopter) Database ObjectType of Permissions RequiredTablesSelect, Insert, Update, Create, Drop, DeleteIndexesCreate, DropTriggersCreate, DropFunctionsCreate, ExecutePackagesCreateProceduresCreate, Execute Standard Verification (default - explicit)Standard Verification (default - implicit)JDBCjdbc:exa:exadb1.example.com:8563; validateservercertificate=1jdbc:exa:exadb1.example.com:8563 ODBCEXAHOST=exadb1.example.com SSLCertificate=SSL_VERIFY_SERVER EXAHOST=exadb1.example.com Connection string examples 1Connection string examples 2JDBCjdbc:exa:exadb1.example.com/<fingerprint>:8563 jdbc:exa:exadb1.example.com:8563; fingerprint=<fingerprint>;ODBCEXAHOST=exadb1.example.com/<fingerprint>:8563 EXAHOST=exadb1.example.com:8563;fingerprint=<fingerprint>; Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;validateservercertificate=0 ODBCSSLCertificate=SSL_VERIFY_NONE JDBCjdbc:exa:exadb1.example.com:8563;legacyencryption=1ODBCUseLegacyEncryption=Y Connection string examples 1JDBCjdbc:exa:exadb1.example.com:8563;encryption =0 ODBCencryption=N |
1.2 Custom Self-signed Certificate
A custom (i.e. non-default) certificate to be used by Exasol can be uploaded via EXAoperation.
Here is a example to create custom self-signed certificate:
sudo openssl genrsa -des3 -out rootCA_key.pem 2048
sudo openssl req -x509 -new -nodes -key rootCA_key.pem -sha512 -days 365 -out rootCA.pem
sudo vi v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.Strategy.com
DNS.2 = *.labs.Strategy.com
DNS.3 = *.internal.Strategy.com
sudo openssl req -new -nodes -out server.csr -newkey rsa:2048 -keyout server_key.pem
sudo openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA_key.pem -CAcreateserial -out server.pem -days 365 -sha512 -extfile v3.ext
cat server.pem > cert_chain.pem; cat rootCA.pem >> cert_chain.pem
Upload the certificate chain and private key via EXAoperation