🚀   Portable does more than just ELT. Explore Our AI Orchestration CapabilitiesÂ
When connecting to your database with SSL/TLS enabled, Portable attempts to establish a secure, encrypted connection. If this step fails, you'll see a "TLS Handshake" error in the diagnostic checks.
Portable can reach your database server, but the TLS/SSL negotiation failed. This could be due to certificate issues, configuration mismatches, or the server not supporting SSL.
Portable uses a certificate verification mode similar to PostgreSQL's sslmode=verify-ca:
| Field | Description |
|---|---|
| SSL Server CA | The Certificate Authority's public certificate used to verify the server's certificate |
| SSL Client Certificate | Your client's public certificate (for mutual TLS / client certificate authentication) |
| SSL Client Key | Your client's private key (paired with the client certificate) |
Your database server may not have SSL enabled.
How to check:
For PostgreSQL:
SHOW ssl;
-- Should return 'on'
For MySQL:
SHOW VARIABLES LIKE 'have_ssl';
-- Should return 'YES'
If you provide an SSL Server CA, it must be the certificate that signed your database server's certificate.
Common mistakes:
To verify your CA certificate matches:
# Download server certificate
openssl s_client -connect db.example.com:5432 -starttls postgres </dev/null 2>/dev/null | openssl x509 -outform PEM > server.crt
# Verify against your CA
openssl verify -CAfile your_ca.pem server.crt
# Should output: server.crt: OK
All certificates and keys must be in PEM format.
Valid PEM format looks like:
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvg...
-----END CERTIFICATE-----
For private keys:
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA...
-----END RSA PRIVATE KEY-----
or
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBg...
-----END PRIVATE KEY-----
If your certificate is in DER format, convert it:
openssl x509 -inform DER -in cert.der -out cert.pem
If your database requires client certificate authentication, both the certificate and private key must be provided and must match.
To verify your client cert and key match:
# Check the modulus of the certificate
openssl x509 -noout -modulus -in client.crt | openssl md5
# Check the modulus of the key
openssl rsa -noout -modulus -in client.key | openssl md5
# These should produce the same hash
Common issues:
To remove passphrase from a key:
openssl rsa -in encrypted.key -out decrypted.key
Certificates have validity periods. An expired CA or server certificate will cause the handshake to fail.
To check certificate expiration:
openssl x509 -in your_cert.pem -noout -dates
If your database uses a self-signed certificate, you must provide that certificate as the SSL Server CA. The server's certificate acts as its own CA in this case.
PostgreSQL uses the ssl parameter and related settings in postgresql.conf:
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'ca.crt' # For client cert verification
MySQL requires SSL settings in my.cnf:
[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
require_secure_transport=ON # To force SSL
AWS RDS uses certificates signed by the RDS Certificate Authority:
Cloud SQL uses Google-managed certificates:
Azure uses DigiCert-signed certificates:
# PostgreSQL (uses STARTTLS)
openssl s_client -connect db.example.com:5432 -starttls postgres
# MySQL (uses STARTTLS)
openssl s_client -connect db.example.com:3306 -starttls mysql
# Direct SSL (port 443 or similar)
openssl s_client -connect db.example.com:443
Look for:
Verify return code: 0 (ok) - certificate chain is validVerify return code: 19 (self signed certificate in certificate chain) - need to provide the CAVerify return code: 10 (certificate has expired) - certificate needs renewal# PostgreSQL with SSL
psql "host=db.example.com dbname=mydb user=myuser sslmode=verify-ca sslrootcert=ca.pem"
# MySQL with SSL
mysql -h db.example.com -u myuser -p --ssl-ca=ca.pem --ssl-mode=VERIFY_CA
Before contacting support, verify:
-----BEGIN CERTIFICATE-----)If SSL works with command-line tools but Portable still reports a TLS error, contact support with:
openssl s_client -connect <host>:<port>