#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проблема