设置文件内容而不是信任库的路径

Setting file content instead of path for truststore

我正在通过我的 java 代码连接到 oracle ssl 侦听器。 java 代码在 AWS Lambda 中是 运行。为了通过 SSL 端口连接到 oracle,我需要通过 cwallet.sso 证书。此证书经过 base64 编码并存储在保险库中。我能够从保管库中以字符串形式获取证书的内容。我需要 base64 解码并使用内容连接到 oracle.Below 我在本地机器上使用的代码连接到 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");

一般来说,可以从内存中加载证书,例如 here 所述,但在当前情况下,我们受到 Oracle 驱动程序支持的限制。

描述了驱动程序的配置here,看起来除了支持基于文件的信任库之外没有其他任何东西。由于 Oracle 驱动程序是封闭源代码,因此很难提供更明确的答案。