The JMS server supports advanced security functionality to ensure that messages exchanged between consumer and producer applications are not compromised. In particular, the server can be configured to use the Secure Socket Layer (SSL) for all communication purposes. Also, since the structure and names of destinations may compromise an application, the built-in name service can be disabled. This chapter provides an overview of the advanced security features in the Novell exteNd Messaging Platform JMS.
Secure Sockets Layer (SSL) was developed by Netscape to allow client and server applications to exchange information securely. The SSL protocol layers on top of any transport protocol and can run under application protocols such as HTTP. SSL is based on public-key cryptography and the philosophy behind SSL has been described as follows: "The SSL Protocol is designed to provide privacy between two communicating applications (a client and a server). Second, the protocol is designed to authenticate the server, and optionally the client."
Below is is a high level description of the SSL protocol:
The client requests a SSL connection from the server.
The two parties negotiate a common ciphersuite, which consists of:
a public key exchange algorithm - Diffie-Hellman or RSA
a certificate algorithm - Digital Signature Algorithm (used in DSS certificates), RSA, or anonymous (no certificates used)
a symmetric encryption algorithm, used to encrypt data, such as DES, Triple-DES, RC2, RC4, etc.
a message digest algorithm, such as MD5 and SHA-1, used to check the integrity of the data
The server provides its certificate chain so it can be authenticated by the client. Optionally, the client may provide its certificate chain to be authenticated by the server.
The two parties compute the cryptographic parameters used in the ciphersuite, including the secret keys needed for data encryption.
The two parties exchange application data, using the negotiated algorithms and computed cryptographic parameters.
Once the cryptographic parameters are established, the application data is transparently encrypted and checked for integrity in both directions. For a more thorough description of the SSL protocol and public key cryptography, please refer to alternative literature.
The JMS server leverages SSL support in the underlying ORB. The protection falls into two categories:
Confidentiality: Communication is integrity and confidentiality protected using the available default cipher suites:
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA
SSL_DH_DSS_WITH_DES_CBC_SHA
SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_DSS_WITH_DES_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_RSA_WITH_DES_CBC_SHA
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
SSL_DH_anon_WITH_RC4_128_MD5
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
SSL_DH_anon_WITH_DES_CBC_SHA
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
Integrity: Communication is only integrity protected using the available default cipher suites:
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
The cipher suites listed above have four components:
The key exchange algorithm: DHE (Diffie-Hellman ephemeral) or RSA
The certificate algorithm: DSS, RSA, or anon (anonymous, no certificate)
The symmetric cipher: DES in CBS mode, DES-EDE in CBC mode (tripple-DES), RC4 (40 bit or 128 bit), or NULL (no data encryption cipher)
The message digest: MD5 or SHA-1
When specifying the cipher suite, it's either possible to refer to a group of suites or simply specify a comma-separated list of suites that the JMS server should honor. The names of individual suites are as listed above. The following strings for cipher suite combinations are defined:
CIPHER_SUITES_RSA_WITH_NULL:
RSA-authenticated un-encrypted cipher suites, which includes SSL_RSA_WITH_NULL_SHA and SSL_RSA_WITH_NULL_MD5.
CIPHER_SUITES_RSA_WITH_ALL:
All RSA key-exchange cipher suites, including SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, and SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5.
CIPHER_SUITES_RSA_EXPORT_WITH_ALL:
Export-permitted RSA key-exchange cipher suites, including SSL_RSA_EXPORT_WITH_RC4_40_MD5 and SSL_RSA_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_RSA_NONEXPORT_WITH_ALL:
Export-restricted RSA key-exchange cipher suites, including SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, and SSL_RSA_WITH_DES_CBC_SHA.
CIPHER_SUITES_DHE_WITH_ALL:
All DHE key-exchange cipher suites, including SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, and SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_DHE_EXPORT_WITH_ALL:
The export-permitted DHE key-exchange cipher suites, i.e. SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_DHE_NONEXPORT_WITH_ALL:
Export-restricted DHE key-exchange cipher suites, including SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA and SSL_DHE_RSA_WITH_DES_CBC_SHA.
CIPHER_SUITES_DHA_WITH_ALL:
Non-authenticated anonymous Diffie-Hellman cipher suites, including:
SSL_DH_anon_WITH_RC4_128_MD5, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, and SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_DSA_WITH_ALL:
All DSA cipher suites, including SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DH_DSS_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, and SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_DSA_EXPORT_WITH_ALL:
Export-permitted DSA cipher suites, including SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, and SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA.
CIPHER_SUITES_INTEGRITY_ONLY:
Integrity only cipher suites, i.e. SSL_RSA_WITH_NULL_MD5 and SSL_RSA_WITH_NULL_SHA.
CIPHER_SUITES_CONFIDENTIALITY:
All confidentiality cipher suites, including SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_DSS_WITH_DES_CBC_SHA, SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, and SSL_DH_anon_WITH_3DES_EDE_CBC_SHA.
CIPHER_SUITES_ALL:
All the cipher suites supported by the JMS server.
The order in which cipher suites are specified determines their priority. This means that the first common cipher suite in the client's list of suites and the JMS server's list of suites will be used to establish communication.
The pluggable security if configured using the following properties from the JMQMessageService interface:
msgsvc.security.realm
- The fully classified name of the
authentication class. This class must implement the
Realm interface.
msgsvc.security.manager
- The fully classified name of the
principal manager class. This class must implement the
PrincipalManager interface. Note that if you specify a custom principal manager you
must also specify a custom realm.
msgsvc.security.authorization
- The fully classified name of
the access control list class. This class must implement the
AclManager
interface.
The SSL configuration is specified using the following properties from the JMQMessageService interface:
msgsvc.security.enable
- As described
previously this property must be set to true
to cause the JMS server to enable security.
msgsvc.ssl.enable
- If this property
is set to true, then the JMS server exposes a secure connection
factory object, which clients can use to create confidential connections.
Note that the client connection factory must be configured with the
desired quality of protection as well as a set of trusted certificates
and certificate authorities.
msgsvc.ssl.certificate
- Directory with the JMS server's
SSL information. This property will be consulted when the
msgsvc.ssl.enable
property is set to TRUE. The JMS server
will look for the following files in this directory:
A privateKey.der
file with the private key in DER format.
The key may optionally be encrypted.
A certificate.chain
file with a chain of DER encoded
certificates. You can optionally specify the certificate.der
file described below.
A certificate.der
file with a single DER encoded
certificate.
A certs
directory from which all files with suffix
.der
are loaded. These files must be ASN.1 DER encoded
trusted CA certificates.
msgsvc.ssl.client.certificate
- Boolean property to decide
whether an SSL enabled JMS server requires client applications to
present it with a certificate. This property will be consulted when the
msgsvc.ssl.enable
property is set to TRUE.
msgsvc.ssl.password
- The password to decrypt the private key.
This property should only be specified when the private key is encrypted.
This property will be consulted when the msgsvc.ssl.enable
property is set to TRUE. It will be used to decrypt the private key loaded
from the privateKey.pkcs8
file.
msgsvc.ssl.cipher.suites
- A list of cipher suites supported.
Each name in this list must correspond to a string constant defined in the
ORB CipherSuite
interface. Examples include:
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_RSA_EXPORT_WITH_RC4_40_MD5
CIPHER_SUITES_RSA_EXPORT_WITH_ALL
CIPHER_SUITES_CONFIDENTIALITY
msgsvc.naming.enable
- Boolean property to disable the JMS server
from exposing a name service. The default value for this property is true.
If this property is set to false, then the JMS server will not expose a COS
name server with administered objects and destinations. Since the JMS
server's name space is accessed using the JNDI/CosNaming driver it will not be
protected. When running the JMS server in SSL mode, the name space can be
disabled to prevent clients from getting clear text access to the name space.
When the name service is disabled, administered objects and destinations
(queues and topics) are not accessible via JNDI. Instead, client applications must
use the JMQConnectionFactory objects to bootstrap connection factories and the
JMQQueue and
JMQTopic
objects for bootstrapping destination objects. Note that the name space
should only be disabled if clean text access compromises the security
of an application.
These properties are part of the msgsvc.properties
file used by the
JMS server program jmqserv.
Copyright © 2003, 2004 Novell, Inc. All rights reserved. Copyright © 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.