在Spring上通过SSL连接到JMX

时间:2015-03-27 12:06:47

标签: spring jmx qpid spring-jmx

在我的messagedriven项目中,我有一点需要JMX,删除消息队列。

目前,我创建了qpid代理的MBean,如下所示:

<bean name="jmxConnection"
    class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"
    p:serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:8999/jmxrmi" >
    <property name="environment">
        <map>
            <entry key="jmx.remote.credentials">
                <bean class="org.springframework.util.StringUtils"
                    factory-method="commaDelimitedListToStringArray">
                    <constructor-arg value="username, password" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

<bean id="managedBroker" class="org.springframework.jmx.access.MBeanProxyFactoryBean"
    p:objectName='org.apache.qpid:type=VirtualHost.VirtualHostManager,VirtualHost="default"'
    p:server-ref="jmxConnection" 
    p:proxyInterface="org.apache.qpid.management.common.mbeans.ManagedBroker" />

这有效,但我想使用SSL。在代理方面,我可以将SSL设置为JMX连接。

Qpid手册说必须通过jconsole设置信任库。

jconsole -J-Djavax.net.ssl.trustStore=jmxtruststore.jks -J-Djavax.net.ssl.trustStorePassword=password

是否可以使用Spring在jmxConnection上直接设置信任库?

1 个答案:

答案 0 :(得分:0)

不,您不能直接在jmxConnection上设置信任库,但是,您可以使用该环境映射为jmxConnection设置SslRMIServerSocketFactory和SslRMIClientSocketFactory。这两个类将管理服务器和客户端的SSL套接字。我相信上述两个类的环境贴图键是&#34; jmx.remote.rmi.server.socket.factory&#34;和&#34; jmx.remote.rmi.client.socket.factory&#34;分别。

您还需要同时设置&#34; javax.net.ssl.trustStore&#34;和&#34; javax.net.ssl.trustStorePassword&#34; spring项目中的java属性(通过在运行时传递环境变量或者自己在应用程序中显式设置它们。之后你的jmxConnection也将使用SSL。