我正在使用 ActiveMQ 5.8.0,它支持 AMQP 1.0 作为队列代理。我正在尝试使用 Qpid AMQP1.0 客户端 jms 库从 Java 客户端与此通信,但没有看到指定密钥库和信任库信息的方法。
我已经通过 Java VM 选项(例如 -Djavax.net.ssl.keyStore)传入 SSL 凭据成功配置了客户端,但是对于我的最终解决方案来说,这不是可接受的方法......我需要能够指定此信息来自代码中。
我目前正在使用 createFromURL 方法从包含此处定义的 SSL 参数的 URL 生成连接,但似乎没有从 URL 解析密钥库信息(以及可能的故障转移参数)。
String connectionUrl = "amqps://localhost/?brokerlist='tcp://localhost:5671?ssl='true'&key_store='C:/apache-activemq-5.8.0/conf/client.ks'&key_store_password='password'&trust_store='C:/apache-activemq-5.8.0/conf/client.ts'&trust_store_password='password'";
ConnectionFactoryImpl connectionFactory = ConnectionFactoryImpl.createFromURL(connectionUrl);
有谁知道将安全信息提供到连接中的更好方法?
更新: 对,所以对 API 进行了一些挖掘,我发现该库使用 Default SSLSocketFactory
请参阅:org.apache.qpid.amqp_1_0.client.Connection
final Socket s;
if(ssl)
{
s = SSLSocketFactory.getDefault().createSocket(address, port);
}
因此,似乎无法在 JVM 选项之外指定此信息以设置默认值……至少在当前版本的 Qpid 客户端库中。