Veraltet

JBoss-Messaging schützen

In diesem Abschnitt wird beschrieben, wie JBoss-Messaging gesichert wird.

Hinweis: Die folgenden Informationen verweisen auf JMS-Warteschlangen. Wenn Sie JMS-Topics für JMS-Messaging verwenden, befolgen Sie ähnliche Sicherheitsempfehlungen.
Hinweis: Die bereitgestellte Beispielkonfiguration mit JBoss Messaging Version 4.3dient nur zur Veranschaulichung. Die Probe ist keineswegs erschöpfend oder optimal. Es gibt andere Methoden zum Sichern der Nachrichtenwarteschlange, die jeweils ihre eigenen Stärken und Schwächen aufweisen. Da die Message-Queueing-Software von Drittanbietern bereitgestellt wird, empfehlen wir Ihnen dringend, Ihren Ansatz zur Abschottung oder Sicherung von Nachrichtenwarteschlangen mit JBoss-Messaging-Spezialisten zu besprechen. Produkte können sich entwickeln. Daher können sich die Prozesse zur Abschottung des Systems im Laufe der Zeit ändern. Sollten Sie Probleme mit den hier besprochenen Prozessen haben, bitten wir Sie, direkt mit JBoss zu arbeiten. Sie sollten die folgenden Empfehlungen als Ausgangspunkt verwenden und die Konfiguration an Ihre spezifische Betriebsumgebung anpassen.

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.

Hinweis In diesem Dokument wird vorausgesetzt, dass Sie das JBoss-Messaging-Paket installiert haben. Diese Anweisungen funktionieren nicht mit JBoss MQ.

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>
Wenn Sie die sofort einsatzfähige JBOSS-Konfiguration verwenden, die mit den folgenden Schritten installiert wurde, können Sie den neuen Server starten:
JBOSS_HOME/bin/run.sh -b 0 -c messaging

Warteschlangensicherheit 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.

Anmerkung: Wenn Sie das Messaging für einen anderen Servernamen konfigurieren möchten, ersetzen Sie "messaging" in den Dateipfaden für die Benutzer-und Rolleneigenschaften durch den Namen des konfigurierten Servers.
Beispiel:
#
# user=role1,role2,...
guest=guest
vinay=vinay
noacc=noacc
Der Benutzer und die Kennwörter sind in JBOSS_HOME/server/messaging/conf/props/messaging-users.properties: definiert.
#
# 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.

Diese Datei sollte den folgenden Inhalt haben:
<?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.