Most TeeSQL connection failures fall into three categories: DSN/TLS misconfiguration (the connection never reaches the cluster), attestation rejection (the connection reaches the cluster but the verifier refuses the quote), and authentication rejection (the cluster sidecar doesn’t accept your role/secret). This page lists the exact error strings emitted by the open-source clients and the cluster sidecar, with the fix for each. If your error is not listed, the most useful next step is to enable verbose logging on whichever RA-TLS client library you use and read the first error in the stack — later errors are usually downstream consequences.Documentation Index
Fetch the complete documentation index at: https://docs.teesql.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- The connection details from the Connection string page
- Access to your application’s logs (the RA-TLS client library prints to stderr by default)
- For operator-side issues, access to the cluster sidecar’s
/healthand/attestationendpoints on port8080
Intel Trust Authority API key required
Intel Trust Authority API key required
prisma-ra-tls v0.3 requires a URI-form DSN
prisma-ra-tls v0.3 requires a URI-form DSN
host=… port=…). Switch to URI form: postgresql://teesql_readwrite:your-32-byte-hex-secret@your-cluster.teesql.com:5433/mydb.upstream cert has no TDX attestation extension
upstream cert has no TDX attestation extension
allowSimulator: true (TS) / allow_simulator=True (Python) / allow_simulator: true (Rust). For production: confirm the host and port are correct — port 5433 on a TeeSQL CVM, not 5432.TDX TD is in debug mode — connection refused
TDX TD is in debug mode — connection refused
allowDebugMode: true in production.Unacceptable TCB status
Unacceptable TCB status
MRTD is not in the allowlist
MRTD is not in the allowlist
allowedMrTd / allowed_mrtds allowlist. Either the operator rolled out a new CVM image (legitimate — update your allowlist with the new MRTD published by the operator) or you are connecting to a different cluster than expected (illegitimate — stop, do not bypass).Manifest signature verification failed / manifest expired
Manifest signature verification failed / manifest expired
_teesql-leader.your-cluster.teesql.com (DNS TXT) failed signature or freshness checks. Causes:- Wrong
manifest_signer_addressconfigured for the cluster (most common — recheck against the operator’s value) - The dns-controller has stopped publishing fresh manifests; ask the operator to verify the controller is running
- Local clock skew is so large that a freshly signed manifest looks expired
cert chain verification failed
cert chain verification failed
password authentication failed
password authentication failed
- The role in the DSN is
teesql_readorteesql_readwrite(no other roles authenticate via cluster secret) - The password is the cluster secret as a 64-character hex string, not the Postgres password
- Privilege downgrade is allowed (the read-write secret authenticates as
teesql_read) but upgrade is not (the read secret cannot authenticate asteesql_readwrite)
pg_auth_inject failed: early eof
pg_auth_inject failed: early eof
teesql_read or teesql_readwrite. Ask the operator to re-provision the role.connection refused (peer 127.0.0.1)
connection refused (peer 127.0.0.1)
- In production,
/var/run/dstack.sockis mounted into your container - In dev, the dstack simulator is running and
DSTACK_SIMULATOR_ENDPOINT(or your library’s equivalent) points at it
upstream TLS handshake timed out
upstream TLS handshake timed out
5433 did not complete in time. Likely causes: network filtering between your CVM and the cluster, the cluster CVM is not running, or the dstack gateway is misconfigured for SNI. Verify with curl http://your-cluster.teesql.com:8080/health — if /health is reachable but :5433 is not, the issue is at the proxy/gateway layer.TLS handshake failed (raw psql/libpq)
TLS handshake failed (raw psql/libpq)
psql/libpq connections fail when sslmode does not match the cert chain on the wire. In simulator mode the RA-TLS cert is self-signed and not chainable to a public CA, so use sslmode=require rather than sslmode=verify-full. In production, supply sslrootcert=<ra-tls-ca.pem> together with sslmode=verify-full.Quick health checks
Two endpoints on the cluster sidecar are useful for narrowing down whether the cluster itself is healthy before suspecting your client:/health is failing, the issue is the cluster, not your connection.