我正在尝试使用 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 协议?