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

GlassFish 7.9+Jakarta EE10访问OCI对象存储遇证书错误求助

GlassFish 7.9 + Jakarta EE 10 连接OCI存储桶证书错误解决方法

一、确认证书导入的正确性

  • 确保导入的是OCI存储桶服务端的完整证书链,而非单根证书。可通过以下命令获取完整证书链:
    openssl s_client -connect <OCI存储桶端点>:443 -showcerts
    
    将返回的所有证书(从服务器证书到根CA)依次导出为.crt文件。
  • 验证导入命令的正确性,导入GlassFish的cacerts.jks命令示例:
    keytool -importcert -alias oci-bucket -file /path/to/oci-cert-chain.crt -keystore <GlassFish安装目录>/glassfish/domains/<你的域名>/config/cacerts.jks -storepass changeit
    
    替换路径、证书文件和域名后执行,默认cacerts密码为changeit。
  • 导入后执行命令确认证书已存在:
    keytool -list -keystore <cacerts路径> -alias oci-bucket
    

二、配置GlassFish的SSL信任库

  • 登录GlassFish管理控制台(默认端口4848),进入配置 -> server-config -> JVM设置 -> JVM选项,检查是否存在以下参数:
    -Djavax.net.ssl.trustStore=<GlassFish安装目录>/glassfish/domains/<你的域名>/config/cacerts.jks
    -Djavax.net.ssl.trustStorePassword=changeit
    
    若不存在则添加,保存后重启GlassFish。
  • 若使用自定义keystore,需确保应用代码未硬编码其他信任路径,保证复用容器配置的信任库。

三、适配Jakarta REST Client的SSL配置

如果使用Jakarta REST Client调用OCI API,需确保客户端复用GlassFish的信任库,示例代码:

import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.security.KeyStore;

// 获取GlassFish配置的信任库路径和密码
String trustStorePath = System.getProperty("javax.net.ssl.trustStore");
char[] trustStorePassword = System.getProperty("javax.net.ssl.trustStorePassword").toCharArray();

KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(trustStorePath), trustStorePassword);

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);

// 创建使用容器信任库的客户端
Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();

四、排查环境差异与验证

  • SpringBoot默认自动加载系统信任库,而GlassFish需显式配置JVM参数指定信任库路径,需检查domain.xml中的<jvm-options>是否被其他配置覆盖。
  • 每次修改证书或JVM参数后,必须重启GlassFish确保配置生效,可编写简单测试代码调用OCI存储桶基础API验证证书是否生效。

内容的提问来源于stack exchange,提问作者Gilvan André

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:04:53