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

PL/SQL调用Java类遇ORA-29532与SSL握手失败问题求助

问题:PL/SQL调用Java类时遭遇ORA-29532与SSL握手失败

通过PL/SQL调用Java类时触发ORA-29532错误,提示“Java调用因未捕获异常终止”,具体异常为javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure。部分HTTPS URL可正常访问,但多数URL触发该错误;但在IntelliJ中直接运行该Java类时,所有URL均能正常请求。

相关代码

Java源定义

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ConnectHttps" AS   
import java.io.*;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;

public class ConnectHttps
{
    public static String GetHttps() throws IOException {
        URL u = new URL("https://api.blockchain.com/v3/exchange/l2/BTC-USD"); // - 无法访问
        //URL u = new URL("https://official-joke-api.appspot.com/random_joke"); // - 可正常访问
        HttpsURLConnection http = (HttpsURLConnection) u.openConnection();
        http.setAllowUserInteraction(true);
        http.setRequestMethod("GET");
        http.connect();

        InputStream is = http.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null)
        {
            stringBuilder.append(line + "\n");
        }
        return stringBuilder.toString();
    }
};

PL/SQL函数与执行语句

create or replace function test return varchar2
AS LANGUAGE JAVA
NAME 'ConnectHttps.GetHttps() return java.lang.String';
/
exec dbms_output.put_line(test);

问题排查方向

  • JDK版本与加密套件差异:Oracle数据库内置JVM(JServer)的JDK版本通常比本地开发环境旧,现代HTTPS服务器要求的TLS 1.2+加密套件可能在旧版JDK中未支持或未启用,导致握手不兼容。
  • 根证书信任问题:本地IntelliJ所用JDK的信任库(cacerts)已包含目标网站根证书,但数据库JVM的信任库可能缺失这些证书,需要手动导入。
  • 网络环境限制:数据库服务器所在网络存在代理、防火墙拦截部分HTTPS握手请求,而本地开发环境无此限制。
  • SSL参数配置缺失:代码未显式指定SSL版本或SocketFactory,数据库JVM默认配置不符合目标服务器要求,可添加如下配置示例:
    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(null, null, new SecureRandom());
    http.setSSLSocketFactory(sslContext.getSocketFactory());
    
  • 权限与策略限制:数据库可能未授予Java类java.net.SocketPermission权限,或Java策略文件限制了目标域名的网络访问,导致握手过程被拦截。

内容的提问来源于stack exchange,提问作者jarda dasek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:09:56