java - 如何在java中使用apache qpid库和动态证书字符串(而不是证书路径)创建amqp连接
问题描述
当前通过覆盖 JmsConnectionFactory(qpid apache) application-context.xml 的 setRemoteURI("") 创建 amqp 连接
<bean id="amqpConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory">
<bean class="com.abc.AMQPSConnectionFactory">
</bean>
</property>
</bean>
<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent">
<property name="testConnectionOnStartup" value="true" />
<property name="configuration" ref="amqpConfig" />
</bean>
我的 AMQPSConnectionFactory - 目前正在通过覆盖 JmsConnectionFactory 的 setRemoteURI("") 来创建具有给定 KEYSTORELOCATION、KEYSTOREPASSWORD、KEYSTORETYPE 的 amqp 连接,如图所示
public class AMQPSConnectionFactory extends JmsConnectionFactory {
public AMQPSConnectionFactory() {
setRemoteURI("URL?jms.prefetchPolicy.queuePrefetch=true&transport.keyStoreLocation=KEYSTORELOC&transport.keyStorePassword=KEYSTOREPASSWORD&transport.keyStoreType=KEYSTORETYPE&transport.trustAll=true&transport.enabledProtocols=TLSv1.2");
}
}
如何通过在运行时传递 base 64 编码的 CERTIFICATE 字符串(而不是 KEYSTORELOCATION)、该证书的 base 64 编码的密码(而不是 KEYSTOREPASSWORD)和 KEYSTORETYPE 来创建 amqp 连接?
问题:我无法将证书保留在路径中(在 uri 中提供 KEYSTORELOCATION),但需要使用证书字符串本身
解决方案
与您所要求的最接近的匹配项是 SSLContext 覆盖,它允许您提供自己的 SSLContext,客户端将在 SSL 握手期间使用。没有直接向连接工厂提供证书的机制,我怀疑是否会添加任何此类机制。
JmsConnectionFactory factory = new JmsConnectionFactory("amqps://localhost:5673");
factory.setSslContext(<your-own-context>);
推荐阅读
- javascript - React Bootstrap:元素类型无效
- c++ - 如何使用文件夹路径和cmake“链接所有”动态和/或静态库?
- angular - Util 模块中 util.isNullOrUndefined(object) 的替代方法是什么?角 7
- python-3.x - 首先按时间戳值对 pandas 中的行进行排序,然后按特定顺序对列的分类值进行排序
- spring-cloud-dataflow - Spring Cloud Task App - 组合任务运行器不会关闭
- python - 控制台中的 Sublime Python 输入(自动化无聊的东西)
- python - 如何在 python 3 的版本之间进行更改
- python - 如何在 ModelForm init() 中获取当前用户?
- react-native-elements - 使用 RN Elements 时,有没有办法从 FormLabel 调用光标?
- javascript - 如果字段值从加载的表单默认值更改,则禁用/启用按钮