我正在尝试使用ACE + TAO框架编写多线程客户端,该框架同时连接到多个CORBA服务器。每个服务器都公开相同的CORBA接口,但具有一组不同的SSL密钥。
因此,每个客户端必须使用不同的SSL密钥才能连接到服务器。
我有多个客户端配置:
dynamic SSLIOP_Factory Service_Object * TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory() "-SSLAuthenticate SERVER_AND_CLIENT -SSLPrivateKey 'PEM:client3-key.pem' -SSLCertificate 'PEM:client3-client-cert.pem' -SSLCAFile 'PEM:client3-cacert.pem'"
dynamic Advanced_Resource_Factory Service_Object* TAO_Strategies:_make_TAO_Advanced_Resource_Factory() "-ORBProtocolFactory SSLIOP_Factory"
static Client_Strategy_Factory "-ORBConnectStrategy blocked"
当我初始化第一个ORB时,我可以看到加载了SSLIOP协议,并且还加载了第一个客户端的密钥。然后,与第一台服务器的连接按预期工作。
但是当我尝试初始化到第二个服务器(使用不同的SSL密钥)的连接时,我可以看到,当初始化新的ORB时,SSLIOP协议未初始化,仍然使用来自第一个服务器的SSL密钥。因此,与第二台服务器的连接失败。
CORBA::Object_var object = m_orb->string_to_object(m_ior_file.c_str());
因CORBA :: TRANSIENT而失败,因为密钥与服务器不匹配。
我尝试将“-ORBGestalt”“Local”和“-ORBCollocation”“no”传递给CORBA :: ORB_init(),但是没有任何成功,SSLIOP协议只是第一次配置。
有没有办法为不同的IOR指定不同的SSL密钥或重新配置SSLIOP协议?