JBoss-Messaging schützen
In diesem Abschnitt wird beschrieben, wie JBoss-Messaging gesichert wird.
JBoss-Warteschlangensicherheit konfigurieren
JBoss hat zwei verschiedene JMS-Optionen. In Version 4.2 von JBoss ist dies die Server-Software, die mit einer JMS-Funktion namens JBoss MQausgeliefert wird. In Release 4.3wurde das JMS-Angebot jedoch überarbeitet, um die Leistung zu verbessern und zusätzliche Funktionen bereitzustellen. Das neue JMS-Feature heißt JBoss Messaging.
Installieren Sie JBoss Messaging mit dem folgenden Ant-Release-Script, um eine Warteschlange mit dem Namen testQueuezu erstellen. Überprüfen Sie anhand der folgenden Informationen, ob die Messaging-Installation erfolgreich war:
JBOSS_HOME/server/messaging/deploy/jboss-messaging.sar/destination-service.xml
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=testQueue" xmbean-
dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">
jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
<attribute name="SecurityConfig">
<security>
<role name="guest" read="true" write="true"/>
<role name="publisher" read="true" write="true" create="false"/>
<role name="noacc" read="false" write="false" create="false"/>
</security>
</attribute>
</mbean>
JBOSS_HOME/bin/run.sh -b 0 -c messagingWarteschlangensicherheit in JBoss konfigurieren
Wie im XML-Snippet dargestellt, enthält die Warteschlangendefinition destination-service.xml ein Element SecurityConfig , das definiert, welche Aktivitäten von einer Rolle oder Gruppe ausgeführt werden können. Die Benutzer und Gruppen sind in JBOSS_HOME/server/messaging/conf/props/messaging-roles.propertiesdefiniert.
#
# user=role1,role2,...
guest=guest
vinay=vinay
noacc=noacc#
# user=password
guest=guest
vinay=vinay
noacc=noacc
An diesem Punkt haben Sie die Benutzerauthentifizierung für die JBoss-Warteschlangen definiert.
JBoss-Messaging für die Verwendung von SSL konfigurieren
Der erste Schritt ist die Einrichtung des Keystores. Das Messaging-Paket enthält einen Beispielkeystore und einen Truststore. Sie können diesen Keystore verwenden oder einen eigenen erstellen. Kopieren Sie in beiden Fällen den Keystore in das Verzeichnis JBOSS_HOME/server/Servername/conf/.
Diese werden aus der SSL-Bisocket-Konfigurations-XML referenziert (siehe SSL-Bisocket-Transport aktivieren in diesem Thema).
Sichere Verbindungsfactory hinzufügen
Erstellen Sie im Verzeichnis JBOSS_HOME/server/servername/deploy/ eine neue XML-Datei mit dem Namen messaging-secure-socket-service.xml. Ein Beispiel für diese Datei ist im JBoss-Messaging-Installationspaket an der Position examples/secure-socket/etc/messaging-secure-socket-service.xmlenthalten.
<?xml version="1.0" encoding="UTF-8"?>
<!--
Secure Socket Transport Example: the deployment descriptor for the
secure socket factory service, secure connector and secure connection factory.
$Id: messaging-secure-socket-service.xml 2773 2007-06-12 13:31:30Z cvs_login $
-->
<server>
<mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
name="jboss.messaging.destination:service=SecureConnectionFactory" xmbean-
dd="xmdesc/ConnectionFactory-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
</depends>
<depends optional-attribute-name="Connector">jboss.messaging:service=
Connector,transport=sslbisocket</depends>
<attribute name="JNDIBindings"> <bindings>
<binding>/SecureConnectionFactory</binding> </bindings>
</attribute>
</mbean>
</server>
SSL-Bisocket-Transport aktivieren
Erstellen Sie im Verzeichnis JBOSS_HOME/server/servername/deploy/ eine neue XML-Datei mit dem Namen remoting-sslbisocket-service.xml. Ein Beispiel für diese Datei ist im JBoss-Messaging-Installationspaket an der Position examples/config/remoting-sslbisocket-service.xmlenthalten.
Falls Sie Ihren eigenen Keystore mit einem anderen Dateinamen oder Kennwort verwenden, bearbeiten Sie die Datei so, dass sie auf den ausgewählten Keystore und das ausgewählte Kennwort verweist. Der Pfad des Schlüsselspeichers scheint relativ zum Verzeichnis JBOSS_HOME/server/Servername/conf zu sein.
<?xml version="1.0" encoding="UTF-8"?>
<!--
The deployment descriptor for the secure socket factory service and secure
connector.
$Id: remoting-sslbisocket-service.xml 3409 2007-12-04 21:32:54Z cvs_login $
-->
<server>
<mbean code="org.jboss.remoting.transport.Connector"
name="jboss.messaging:service=Connector,transport=sslbisocket" display-
name="SSL Bisocket Transport Connector">
<attribute name="Configuration">
<config>
<invoker transport="sslbisocket">
<!-- There should be no reason to change these parameters - warning!
Changing them may stop JBoss Messaging working correctly -->
<attribute name="marshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat
</attribute>
<attribute name="unmarshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat
</attribute>
<attribute name="dataType" isParam="true">jms</attribute>
<attribute name="socket.check_connection" isParam="true">false</attribute>
<attribute name="timeout" isParam="true">0</attribute>
<attribute
name="serverBindAddress">${jboss.bind.address}</attribute>
<attribute name="serverBindPort">5457</attribute>
<attribute name="clientSocketClass"
isParam="true">org.jboss.jms.client.remoting.ClientSocketWrapper
</attribute>
<attribute
name="serverSocketClass">org.jboss.jms.server.remoting.ServerSocketWrap
per</attribute>
<attribute
name="serverSocketFactory">jboss.messaging:service=ServerSocketFactory,
type=SSL</attribute>
<attribute name="numberOfCallRetries" isParam="true">1</attribute>
<attribute name="pingFrequency" isParam="true">214748364</attribute>
<attribute name="pingWindowFactor"
isParam="true">10</attribute>
<attribute
name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool<
/attribute>
<!-- End immutable parameters -->
<!-- Periodicity of client pings. Server window by default is twice this
figure -->
<attribute name="clientLeasePeriod" isParam="true">10000</attribute>
<!-- Number of seconds to wait for a connection in the client pool to
become free -->
<attribute name="numberOfRetries" isParam="true">10</attribute>
<!-- Max Number of connections in client pool. This should be
significantly higher than
the max number of sessions/consumers you expect -->
<attribute name="JBM_clientMaxPoolSize" isParam="true">200</attribute>
<!-- Use these parameters to specify values for binding and connecting
control connections to work with your firewall/NAT configuration
<attribute name="secondaryBindPort">xyz</attribute> <attribute
name="secondaryConnectPort">abc</attribute> -->
</invoker>
<handlers>
<handler
subsystem="JMS">org.jboss.jms.server.remoting.JMSServerInvocationHandle
r</handler>
</handlers>
</config>
</attribute>
<depends>jboss.messaging:service=ServerSocketFactory,type=SSL</depends>
</mbean>
<!-- This section is for custom (SSL) server socket factory -->
<!--
The server socket factory mbean to be used as attribute to socket invoker
(see serverSocketFactory attribute above for where it is used). This
service provides the exact same API as the ServerSocketFactory, so can be
set as an attribute of that type on any
MBean requiring an ServerSocketFactory.
-->
<mbean code="org.jboss.remoting.security.SSLServerSocketFactoryService"
name="jboss.messaging:service=ServerSocketFactory,type=SSL" display-name="SSL
Server Socket Factory">
<depends optional-attribute-name="SSLSocketBuilder" proxy-
type="attribute">jboss.messaging:service=SocketBuilder,type=SSL</depends>
</mbean>
<!--
This service is used to build the SSL Server socket factory. This will be
where all the store/trust information will be set. If do not need to make
any custom configurations, no extra attributes need to be set for the
SSLSocketBuilder and just need to set the javax.net.ssl.keyStore and
javax.net.ssl.keyStorePassword system properties. This can be done by just
adding something like the following to the run script for JBoss (this one is
for run.bat):
set JAVA_OPTS=-Djavax.net.ssl.keyStore=.keystore -
Djavax.net.ssl.keyStorePassword=opensource %JAVA_OPTS%
Otherwise, if want to customize the attributes for SSLSocketBuilder, will need
to uncomment them below.
-->
<mbean code="org.jboss.remoting.security.SSLSocketBuilder"
name="jboss.messaging:service=SocketBuilder,type=SSL" display-name="SSL Server
Socket Factory Builder">
<!-- IMPORTANT - If making ANY customizations, this MUST be set to false.
Otherwise, will used default settings and the following attributes will be
ignored. -->
<attribute name="UseSSLServerSocketFactory">false</attribute>
<!-- This is the url string to the key store to use -->
<attribute name="KeyStoreURL">messaging.keystore</attribute>
<!-- The password for the key store -->
<attribute name="KeyStorePassword">secureexample</attribute>
<!-- The password for the keys (will use KeystorePassword if this is not set
explicitly. -->
<attribute name="KeyPassword">secureexample</attribute>
<!-- The protocol for the SSLContext. Default is TLS. -->
<attribute name="SecureSocketProtocol">TLS</attribute>
<!-- The algorithm for the key manager factory. Default is SunX509. -->
<attribute name="KeyStoreAlgorithm">SunX509</attribute>
<!-- The type to be used for the key store.
Defaults to JKS. Some acceptable values are JKS (Sun's keystore format),
JCEKS (Java Cryptography Extension keystore - More secure JKS), and PKCS12
(Public-Key Cryptography Standards #12 keystore - Keystore - version of
RSA's Personal Information Exchange Syntax Standard). These are not case
sensitive.
-->
<attribute name="KeyStoreType">JKS</attribute>
</mbean>
</server>
Wenn Sie diese Schritte ausgeführt haben, können Sie Ihren Server neu starten. Anschließend können Sie die Verbindungsfactory SecureConnectionFactory verwenden. Sie müssen Ihren Client so konfigurieren, dass er SSL für die Verbindung zu den JMS-Warteschlangen verwendet.