如何在Java中使用apache qpid库和动态证书字符串而不是证书的路径创建amqp连接

问题描述

当前通过覆盖JmsConnectionFactory(qpid apache)的setRemoteURI(“”)创建amqp连接 application-context.xml

<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");
    }
}

如何通过在运行时传递以64位编码的CERTIFICATE字符串(而不是KEYSTORELOCATION),该证书的以64位编码的PASSWORD(代替KEYSTOREPASSWORD)和KEYSTORETYPE来创建amqp连接?

问题:我无法将证书保留在某个路径上(在uri中提供KEYSTORELOCATION),但需要使用证书字符串本身

解决方法

与您要查询的内容最接近的匹配项是SSLContext覆盖,它允许您提供自己的SSLContext,供客户端在SSL握手期间使用。没有直接向连接工厂提供证书的机制,我怀疑是否会添加任何此类机制。

 JmsConnectionFactory factory = new JmsConnectionFactory("amqps://localhost:5673");
 factory.setSslContext(<your-own-context>);