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

仅服务器端出现javax.net.ssl.SSLHandshakeException握手失败问题求助

解决PL/SQL调用Java发起HTTPS请求时的SSLHandshakeException问题

我之前也踩过几乎一模一样的坑!你本地能解决是因为把证书加到了自己用的JRE信任库,但PL/SQL里的Java代码是跑在Oracle数据库自带的JVM里的,它的信任库和你本地/服务器上独立的JDK完全不是一回事,这就是问题的核心。下面是一步步的解决办法:

第一步:定位Oracle数据库使用的JVM信任库路径

Oracle自带的JRE通常在安装目录下,你可以通过PL/SQL查询确认:

SELECT value FROM v$parameter WHERE name = 'java_home';

返回的路径一般类似 /u01/app/oracle/product/19c/dbhome_1/jre,对应的信任库文件是 lib/security/cacerts。

第二步:导出子域名的SSL证书

用openssl命令从目标子域名导出证书(服务器上要装openssl,没装的话先安装):

openssl s_client -connect subdomain.example.com:443 < /dev/null | openssl x509 -outform PEM > subdomain.crt

这条命令会把subdomain.example.com的证书保存成PEM格式的subdomain.crt文件。

第三步:将证书导入Oracle的信任库

用Oracle自带的keytool工具导入证书,注意必须用Oracle数据库的运行用户(比如oracle用户)执行,避免权限问题:

$ORACLE_HOME/jre/bin/keytool -import -alias subdomain_example -keystore $ORACLE_HOME/jre/lib/security/cacerts -file subdomain.crt
  • 这里的alias可以随便取,只要唯一就行,比如subdomain_example
  • 默认的信任库密码是changeit(大部分Oracle版本都是这个,如果你改过就用自己的密码)
  • 执行时会提示是否信任该证书,输入yes确认即可

第四步:验证证书是否导入成功

用下面的命令检查刚才的证书是否已经在信任库里:

$ORACLE_HOME/jre/bin/keytool -list -keystore $ORACLE_HOME/jre/lib/security/cacerts -alias subdomain_example

如果能看到证书的详细信息,说明导入成功。

额外排查点(如果导入后还是报错)

  • 检查你的PL/SQL Java代码是否硬编码了信任库路径:如果代码里指定了自定义的keystore,得改成Oracle的cacerts路径,或者去掉硬编码让它用默认信任库。
  • 集群环境要同步操作:如果是RAC集群,所有节点都要导入证书,不然只有单个节点能正常访问。
  • 重启数据库实例:极少数情况下,Oracle JVM需要重启才能加载新证书,导入后如果还是失败,可以试试重启数据库。

注意事项

  • 不要直接替换cacerts文件:直接覆盖会丢失原有信任的根证书,一定要用keytool导入的方式。
  • 不同Oracle版本的JRE路径可能有差异:比如12c及以后有些版本的JRE在$ORACLE_HOME/jdk/jre下,执行命令时要对应调整路径。

内容的提问来源于stack exchange,提问作者Iván

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:41:44