【问题标题】:how to create amqp connection using apache qpid library and dynamic certificate string (instead of path to certificate) in java如何在java中使用apache qpid库和动态证书字符串(而不是证书路径)创建amqp连接
【发布时间】:2021-01-17 11:01:25
【问题描述】:

当前通过覆盖 JmsConnectionFactory(qpid apache) 的 setRemoteURI("") 创建 amqp 连接 应用程序上下文.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");
    }
}

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

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

【问题讨论】:

    标签: java ssl dynamic amqp qpid


    【解决方案1】:

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

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

    【讨论】:

    • 你能分享一个如何覆盖 SSLContext 的例子
    • 加了一个代码sn -p,方法都在工厂里记录了
    • 最终 InputStream in = getCertificateAsInputStream();最终 KeyStore ks = KeyStore.getInstance("PKCS12"); ks.load(in, getPassword()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, getPassword());最终的 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); SSLContext 上下文 = SSLContext.getInstance("TLSv1.2"); context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);结果问题-原因:一般 SSLEngine 问题
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多