使用wlthint3client.jar实现WebLogic JNDI双向SSL认证的代码示例求助
wlthint3client.jar 实现WebLogic JNDI双向SSL认证方案
报错原因
wlthint3client.jar是WebLogic提供的轻量瘦客户端包,未实现全量客户端wlfullclient.jar中Environment类的SSL配置接口,直接调用setSSLClientTrustManager、loadLocalIdentity方法会抛出UnsupportedOperationException异常。
可用实现方案
瘦客户端需通过标准JSSE密钥库+WebLogic系统属性的方式配置双向SSL,具体步骤如下:
- 提前准备两类JKS密钥库文件:
- 信任库:存储服务端CA根证书,示例文件名为
trust.jks,记录访问密码 - 身份库:存储客户端证书链及对应私钥,示例文件名为
identity.jks,记录访问密码、私钥密码
- 信任库:存储服务端CA根证书,示例文件名为
- 代码中先配置SSL相关系统属性,再初始化JNDI上下文即可
示例代码
import javax.naming.InitialContext; import java.util.Hashtable; public class WlThinClientSslDemo { public static void main(String[] args) throws Exception { // 1. 配置SSL系统属性,也可通过JVM启动参数传入 // 信任库配置 System.setProperty("weblogic.security.SSL.trustedCAKeyStore", "/path/to/trust.jks"); System.setProperty("weblogic.security.SSL.trustedCAKeyStorePasswd", "信任库密码"); // 客户端身份库配置 System.setProperty("weblogic.security.SSL.identityKeyStore", "/path/to/identity.jks"); System.setProperty("weblogic.security.SSL.identityKeyStorePasswd", "身份库密码"); System.setProperty("weblogic.security.SSL.identityKeyPasswd", "私钥密码"); // 可选:配置SSL协议版本,按需调整 System.setProperty("weblogic.security.SSL.protocolVersion", "TLSv1.2"); // 可选:关闭主机名校验,测试环境可开,生产建议关闭 System.setProperty("weblogic.security.SSL.ignoreHostnameVerification", "true"); // 2. 初始化JNDI参数 Hashtable<String, String> env = new Hashtable<>(); env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); // 注意双向SSL要使用t3s协议,端口为WebLogic的SSL监听端口 env.put(InitialContext.PROVIDER_URL, "t3s://weblogic服务端IP:SSL端口"); // 3. 创建上下文,后续正常做JNDI lookup操作即可 InitialContext context = new InitialContext(env); // 后续业务逻辑:比如lookup远程EJB之类的 // Object remoteObj = context.lookup("远程资源JNDI名称"); } }
注意事项
- 服务端WebLogic需提前配置好SSL监听、双向客户端证书校验规则
- 密钥库版本需要和JDK、WebLogic版本兼容,避免出现密钥库读取异常
- 生产环境建议将密钥库密码通过加密配置注入,不要明文写在代码中
内容的提问来源于stack exchange,提问作者param83
相关产品推荐
相关产品推荐

