Deno连接Supabase Postgres遇TLS证书版本不兼容错误
解决Deno DB连接Supabase Postgres时的TLS证书版本错误
问题分析
你遇到的UnsupportedCertVersion错误,是因为Deno Deploy环境的TLS客户端与Supabase Postgres服务器的证书版本不兼容,导致连接自动降级为非加密模式。虽然当前能正常创建记录,但非加密连接存在安全风险,必须修复。
另外注意:你的代码里有一处明显错误——获取数据库密码时误写为Deno.env.get('DENODB_HOST'),应该改为Deno.env.get('DENODB_PASSWORD'),当前可能通过DENODB_PGURL绕过了这个问题,但后续如果切换到参数配置模式会直接导致连接失败。
解决方案
1. 升级Deno DB到最新版本
旧版本的denodb可能存在TLS配置兼容性问题,先更新依赖的denodb版本:
// 替换为最新版denodb链接(可按需确认当前最新版本号) import { Database, PostgresConnector } from "https://deno.land/x/denodb@v1.4.0/mod.ts";
2. 显式配置SSL参数
在PostgresConnector中添加SSL配置,强制使用兼容的TLS版本,并指定正确的SSL模式:
export const connection = (() => { const DENODB_PGURL = Deno.env.get('DENODB_PGURL'); if (DENODB_PGURL) { // 确保连接URL包含sslmode参数,强制启用SSL const pgUrlWithSsl = DENODB_PGURL.includes('sslmode') ? DENODB_PGURL : `${DENODB_PGURL}?sslmode=require`; return new PostgresConnector({uri: pgUrlWithSsl}); } const DENODB_HOST = Deno.env.get('DENODB_HOST'); if (!DENODB_HOST) throw new Error('DENODB_HOST is not set'); const DENODB_USERNAME = Deno.env.get('DENODB_USERNAME'); if (!DENODB_USERNAME) throw new Error('DENODB_USERNAME is not set'); const DENODB_PASSWORD = Deno.env.get('DENODB_PASSWORD'); // 已修正之前的错误 if (!DENODB_PASSWORD) throw new Error('DENODB_PASSWORD is not set'); const DENODB_DATABASE = Deno.env.get('DENODB_DATABASE'); if (!DENODB_DATABASE) throw new Error('DENODB_DATABASE is not set'); return new PostgresConnector({ host: DENODB_HOST, username: DENODB_USERNAME, password: DENODB_PASSWORD, database: DENODB_DATABASE, ssl: { enabled: true, mode: 'require', // 强制使用兼容的TLS版本,避免证书版本不兼容问题 minVersion: 'TLSv1.2' } }); })()
3. 确认Supabase连接信息正确性
确保使用的Supabase连接URL或主机地址正确:Supabase Postgres主机格式通常为db.<project-id>.supabase.co,端口默认5432,且必须通过SSL连接。
验证修复
将修改后的代码部署到Deno Deploy,检查日志是否不再出现TLS错误提示,同时确认数据库的创建、查询等操作依然正常执行。
内容的提问来源于stack exchange,提问作者ThomasReggi
相关产品推荐
相关产品推荐

