как создать соединение amqp с использованием библиотеки apache qpid и строки динамического сертификата (вместо пути к сертификату) в java

#java #ssl #dynamic #amqp #qpid

#java #ssl #динамический #amqp #qpid

Вопрос:

В настоящее время создается соединение amqp путем переопределения setRemoteURI(«») JmsConnectionFactory(qpid apache) 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 — в настоящее время создает соединение amqp с заданным KEYSTORELOCATION, KEYSTOREPASSWORD, KEYSTORETYPE путем переопределения setRemoteURI(«») JmsConnectionFactory, как показано

 public class AMQPSConnectionFactory extends JmsConnectionFactory {
       public AMQPSConnectionFactory() {
        setRemoteURI("URL?jms.prefetchPolicy.queuePrefetch=trueamp;transport.keyStoreLocation=KEYSTORELOCamp;transport.keyStorePassword=KEYSTOREPASSWORDamp;transport.keyStoreType=KEYSTORETYPEamp;transport.trustAll=trueamp;transport.enabledProtocols=TLSv1.2");
    }
}
  

Как я могу создать соединение amqp, передав строку СЕРТИФИКАТА в кодировке base 64 (вместо KEYSTORELOCATION), ПАРОЛЬ этого сертификата в кодировке base 64 (вместо KEYSTOREPASSWORD) и KEYSTORETYPE во время выполнения?

Проблема: я не могу сохранить сертификат по пути (чтобы указать МЕСТОПОЛОЖЕНИЕ ключа в uri), но мне нужно использовать саму строку сертификата

Ответ №1:

Наиболее близким соответствием тому, что вы просите, является переопределение SSLContext, которое позволяет вам предоставить свой собственный SSLContext, который клиент будет использовать во время SSL-квитирования. Не существует механизма предоставления сертификата непосредственно фабрике соединений, и я сомневаюсь, что какой-либо такой механизм будет добавлен.

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

Комментарии:

1. можете ли вы поделиться примером того, как переопределить SSLContext

2. добавлен фрагмент кода, все методы задокументированы на заводе

3. конечный входной поток in = getCertificateAsInputStream(); конечное хранилище ключей 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 context = SSLContext.getInstance(«TLSv1.2»); context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); Приводит к проблеме-Причина: Общий SSLEngineпроблема