You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过JDBC从Heroku应用外连接Heroku Postgres数据库的SSL报错咨询

该报错本质是Wolfram内置JVM默认信任证书库中没有Heroku数据库的SSL根证书,你提到的手动导入证书生成自定义truststore的方案完全可行,完整操作步骤如下:

操作步骤

1. 导出Heroku数据库的SSL证书

使用openssl工具导出目标数据库的证书,执行以下命令:

openssl s_client -connect <你的Heroku数据库域名>:<数据库端口> < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > heroku-db.crt

Heroku PostgreSQL数据库默认端口为5432,域名、端口、库名等信息均可从Heroku控制台对应数据库的DATABASE_URL配置项中拆解获取。

2. 生成自定义truststore文件

使用JDK自带的keytool工具将导出的证书导入到自定义信任库中,执行以下命令:

keytool -import -alias heroku-db -file heroku-db.crt -keystore heroku-truststore.jks

执行命令后按提示设置truststore密码,确认导入证书时输入yes即可,生成的heroku-truststore.jks即为自定义信任库文件。

3. 配置Wolfram JVM参数并建立连接

在Wolfram中执行以下代码完成连接配置:

(* 加载DatabaseLink包 *)
Needs["DatabaseLink`"]

(* 配置JVM加载自定义truststore *)
JavaBlock[
  (* 若未提前导入PostgreSQL JDBC驱动,先添加驱动路径到类路径 *)
  AddToClassPath["<你的PostgreSQL JDBC驱动jar包本地路径>"];
  jvmSystem = JavaNew["java.lang.System"];
  jvmSystem@setProperty["javax.net.ssl.trustStore", "<heroku-truststore.jks的本地绝对路径>"];
  jvmSystem@setProperty["javax.net.ssl.trustStorePassword", "<你设置的truststore密码>"];
]

(* 建立数据库连接 *)
conn = OpenSQLConnection[
  JDBC["org.postgresql.Driver", "jdbc:postgresql://<你的Heroku数据库域名>:<端口>/<库名>?ssl=true&sslmode=verify-full"],
  "Username" -> "<你的数据库用户名>",
  "Password" -> "<你的数据库密码>"
]

执行完成后若没有报错,即代表连接成功,后续可直接使用conn进行数据库操作。

注意事项
  • 所有代码中尖括号<>包裹的占位符都需要替换为你自己的实际配置值
  • 推荐使用42.2.23及以上版本的PostgreSQL JDBC驱动,避免版本兼容问题
  • 若需要长期使用该连接,可以将两个JVM系统属性配置添加到Wolfram的JVM启动配置文件中,无需每次执行代码前重复设置

内容的提问来源于stack exchange,提问作者Daniel Bigham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:06:03