首页 > 解决方案 > 设置文件内容而不是信任库的路径

问题描述

我正在通过我的 java 代码连接到 oracle ssl 侦听器。Java 代码在 AWS Lambda 中运行。为了通过 SSL 端口连接到 oracle,我需要通过 cwallet.sso 证书。此证书采用 base64 编码并存储在保险库中。我能够从保险库中以字符串形式获取证书的内容。我需要base64解码并使用内容连接到oracle。下面是我在本地机器上使用的代码来连接到oracle ssl端口。由于我从 vault 获取数据作为流,有没有一种方法可以提供证书(cwallet.sso)而无需创建文件?

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());                                                                                           
      Security.addProvider(new oracle.security.pki.OraclePKIProvider());                                                                                             
      String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<hostname>)(PORT=1522))(CONNECT_DATA=(SID=<SID>)))";      
      java.util.Properties info = new java.util.Properties();                                                                                                        
      ClassLoader classLoader = getClass().getClassLoader();                                                                                                         
      info.setProperty("javax.net.ssl.trustStore", Paths.get(classLoader.getResource("certs/cwallet.sso").toURI()).toString());                                      
      info.setProperty("javax.net.ssl.trustStoreType", "SSO");                                                                                                       
      info.setProperty("user", "username");                                                                                                                        
      info.setProperty("password", "password");                                                                                                                       

      Connection conn = DriverManager.getConnection(url, info);                                                                                                      
      Statement stmt = conn.createStatement();                                                                                                                       
      ResultSet rset = stmt.executeQuery("select * from table where rownum < 10");

标签: javaoraclejava-8java-iotruststore

解决方案


一般来说,可以从内存中加载证书,例如此处概述的,但是在当前上下文中,我们受到 Oracle 驱动程序支持的限制。

此处描述了驱动程序的配置,除了支持基于文件的信任存储之外,它看起来并不像任何东西。由于 Oracle 驱动程序是闭源的,因此很难提供更明确的答案。


推荐阅读