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.