我有一个teiid嵌入式服务器,我正在尝试从我的远程客户机通过SSL连接到该服务器上的vds,方法是按照位于:http://teiid.github.io/teiid-documents/12.3.x/content/client-dev/SSL_Client_Connections.html的teiid文档在SystemProperties中传递teiid SSL属性。
当我第一次获得连接时,传入系统属性的客户端SSL属性工作正常。然而,在同一会话中,当我第二次更改系统属性并创建连接时,teiid驱动程序似乎忽略了它,并使用第一个连接的系统属性值创建连接。
以下是复制此问题的代码片段:
公共静态void main(String args[]) { try { String Teiid_SSL_URL = "jdbc:teiid:LocalMSSQLMS@mms://localhost:32750";
Properties properties = new Properties();
properties.put("user", "admin");
properties.put("password", "admin");
//CONNECTION-1 with valid SSL property values in System properties
System.setProperty("org.teiid.ssl.trustStore", "C:/truststore.p12");
System.setProperty("org.teiid.ssl.trustStorePassword", "testssl");
DriverManager.registerDriver(new TeiidDriver());
Connection connection1 = DriverManager.getConnection(Teiid_SSL_URL, properties);
if (connection1.isValid(1000))
{
System.out.println("Connection-1 success");
System.out.println("org.teiid.ssl.trustStore ->" + System.getProperty("org.teiid.ssl.trustStore"));
System.out.println("org.teiid.ssl.trustStorePassword ->" + System.getProperty("org.teiid.ssl.trustStorePassword"));
}
//CONNECTION-2 with invalid SSL property values in System properties
System.setProperty("org.teiid.ssl.trustStore", "abc");
System.setProperty("org.teiid.ssl.trustStorePassword", "abc");
Connection connection2 = DriverManager.getConnection(Teiid_SSL_URL, properties);
if (connection2.isValid(1000))
{
System.out.println("\n\nConnection-2 success");
System.out.println("org.teiid.ssl.trustStore ->" + System.getProperty("org.teiid.ssl.trustStore"));
System.out.println("org.teiid.ssl.trustStorePassword ->" + System.getProperty("org.teiid.ssl.trustStorePassword"));
}
}
catch (Exception e)
{
e.printStackTrace();
}}
====
以上代码的输出:
连接-1成功
org.teiid.ssl.trustStore ->C:/truststore.p12
org.teiid.ssl.trustStorePassword ->testssl
连接-2成功
org.teiid.ssl.trustStore ->abc
org.teiid.ssl.trustStorePassword ->abc
====
这里,在第二个连接的情况下,因为信任库是无效的,它应该抛出错误。但是,它正在成功创建连接-2。如果在具有有效值的connection-1之前创建具有无效值的-2\f25 connection-2 \f6,则驱动程序会如预期的那样抛出错误。因此,得出的结论是,它只是第一次将SSL设置视为系统属性。对于之后的任何其他连接调用,无论设置了什么系统属性,它都只使用第一次调用之前设置的属性。
如果缺少任何额外的客户端配置,请让我知道。否则,请您调查这个问题,并让我知道什么时候可以修复这一点。
谢谢,Megha
发布于 2020-12-22 23:19:55
这是预期的,因为在最初创建套接字工厂时,系统属性是只读的。在相同的vs中很难做到这一点-你必须使用不同的类加载器,在每次你想要改变设置时加载驱动程序jar。否则,您需要创建单独的vms。您可以记录问题,但它的优先级非常低。
https://stackoverflow.com/questions/65352305
复制相似问题