Operating Systems: i5/OS
Personalize the table of contents and search results
Secure communications using Secure Sockets Layer
The Secure Sockets Layer (SSL) protocol provides transport layer
security including authenticity, data signing, and data encryption to ensure
a secure connection between a client and server that uses WebSphere Application
Server. The foundation technology for SSL is public key cryptography,
which guarantees that when an entity encrypts data using its private key,
only entities with the corresponding public key can decrypt that data.
WebSphere Application Server uses Java Secure Sockets Extension (JSSE)
as the SSL implementation for secure connections. JSSE is part of the Java
2 Standard Edition (J2SE) specification and is included in the IBM implementation
of the Java Runtime Extension (JRE). JSSE handles the handshake negotiation
and protection capabilities that are provided by SSL to ensure secure connectivity
exists across most protocols. JSSE relies on X.509 certificate-based asymmetric
key pairs for secure connection protection and some data encryption. Key pairs
effectively encrypt session-based secret keys that encrypt larger blocks of
data. The SSL implementation manages the X.509 certificates.
Managing X.509 certificates
Secure communications
for WebSphere Application Server require digitally-signed X.509 certificates.
The contents of an X.509 certificate, such as its distinguished name and expiration,
are either signed by a certificate authority (CA) or are self-signed. When
a trusted CA signs an X.509 certificate, WebSphere Application Server identifies
the certificate and freely distributes it. A certificate must be signed by
a CA because the certificate represents the identity of an entity to the general
public. Server-side ports that accept connections from the general public
must use CA-signed certificates. Most clients or browsers already have the
signer certificate that can validate the X.509 certificate so signer exchange
is not necessary for a successful connection.
You can trust the identity
of a self-signed X.509 certificate only when a peer in a controlled environment,
such as internal network communications, accepts the signer certificate. To
complete a trusted handshake, first send a copy of the entity certificate
to every peer that connects to the entity. Self-signed certificates are less
expensive than CA-signed certificates because they do not require signer exchange
for a secure connection.
CA and self-signed X.509 certificates reside
in Java keystores. JSSE provides a reference to the keystore in which
a certificate resides. You can select from many types of keystores, including
Java Cryptographic Extension (JCE)-based and hardware-based keystores. Typically,
each JSSE configuration has two Java keystore references: a keystore and a truststore.
The keystore reference represents a Java keystore object that holds personal
certificates. The truststore reference represents a Java keystore object that
holds signer certificates.
A personal certificate without a private
key is an X.509 certificate that represents the entity that owns it during
a handshake. Personal certificates contain both public and private keys. A
signer certificate is an X.509 certificate that represents a peer entity or
itself. Signer certificates contain just the public key and verify the signature
of the identity that is received during a peer-to-peer handshake.
For
more information, see Extracting a signer certificate from a personal certificate
For
more information about keystores, see Keystore configurations.
Signer exchange
When you configure an SSL connection,
you can exchange signers to establish trust in a personal certificate for
a specific entity. Signer exchange enables you to extract the X.509 certificate
from the peer keystore and add it into the truststore of another entity so
that the two peer entities can connect. The signer certificate also can originate
from a CA as a root signer certificate or an intermediate signer certificate.
You can also extract a signer certificate directly from a self-signed
certificate, which is the X.509 certificate with the public key.
Figure
1 illustrates a hypothetical keystore and truststore configuration. An SSL
configuration determines which entities can connect to other entities, and
the peer connections that are trusted by an SSL handshake. If you do not have
the necessary signer certificate, the handshake fails because the peer cannot
be trusted. Figure 1. Signer exchange
In this example, the truststore for Entity A contains three signers.
Entity A can connect to any peer as long as one of the three signers validates
its personal certificate. For example, Entity A can connect to Entity B or
Entity C because the signers can trust both signed personal certificates.
The truststore for Entity-B contains one signer. Entity B is able to connect
to Entity C only, and only when the peer endpoint is using certificate Entity-C
Cert 1 as its identity. The ports that use the other personal certificate
for Entity C are not trusted by Entity B. Entity C can connect to Entity A
only.
In the example, the self-signed configuration seems to represent
a one-to-one relationship between the signer and the certificate. However,
when a CA signs a certificate, it typically signs many at a time. The advantage
of using a single CA signer is that it can validate personal certificates
that are generated by the CA for use by peers. However, if the signer is a
public CA, be aware that the signed certificates might have been
generated for another company other than your target entity. For your internal
communications, private CAs and self-signed certificates are preferable to
public CAs because they enable you to isolate the connections that you want
to occur and prevent those that you do not want to occur.
SSL configurations
An SSL configuration comprises a
set of configuration attributes that you can associate with an endpoint or
set of endpoints in the WebSphere Application Server topology. The SSL configuration
enables you to create an SSLContext object, which is the fundamental JSSE
object that the server uses to obtain SSL socket factories. You can manage
the following configuration attributes:
- An alias for the SSLContext object
- A handshake protocol version
- A keystore reference
- A truststore reference
- A key manager
- One or more trust managers
- A security level selection of a cipher suite grouping or a specific cipher
suite list
- A certificate alias choice for client and server connections
To understand the specifics of each SSL configuration attribute, see Secure Sockets Layer configurations.
Selecting SSL configurations
In previous releases
of WebSphere Application Server, you can reference an SSL configuration only
by selecting the SSL configuration alias directly. Each secure endpoint was
denoted by an alias attribute that references a valid SSL configuration within
a repertoire of SSL configurations. When you made a single configuration change,
you had to re-configure many alias references across the various processes.
Although the current release still supports direct selection, this approach
is no longer recommended.
The current release provides improved capabilities
for managing SSL configurations and more flexibility when you select SSL configurations.
In this release, you can select from the following approaches:
- Programmatic selection
-
You can set an SSL configuration on the running thread prior to an outbound
connection. WebSphere Application Server ensures that most system protocols,
including Internet Inter-ORB Protocol (IIOP), Java Message Service (JMS),
Hyper Text Transfer Protocol (HTTP), and Lightweight Directory Access Protocol
(LDAP), accept the configuration. See Example: Programmatically specifying an outbound SSL configuration
using JSSEHelper API
- Dynamic selection
-
You can associate an SSL configuration dynamically with a specific target
host, port, or outbound protocol by using a predefined selection criteria.
When it establishes the connection, WebSphere Application Server checks to
see if the target host and port match a predefined criteria that includes
the domain portion of the host. Additionally, you can predefine the protocol
for a specific outbound SSL configuration and certificate alias selection.
See Dynamic outbound selection of Secure Sockets Layer configurations for
more information.
- Direct selection
-
You can select an SSL configuration by using a specific alias, as in past
releases. This method of selection is maintained for backwards compatibility
because many applications and processes rely on alias references.
- Scope selection
-
You can associate an SSL configuration and its certificate alias, which
is located in the keystore associated with that SSL configuration, with a
WebSphere Application Server management scope. This approach is recommended
to manage SSL configurations centrally. You can manage endpoints more efficiently
because they are located in one topology view of the cell. The inheritance
relationship between scopes reduces the number of SSL configuration assignments
that set.
Each time you associate an SSL configuration with a cell scope, the node
scope within the cell automatically inherits the configuration properties.
However, when you assign an SSL configuration to a node, the node configuration
overrides the configuration that the node inherits from the cell. Similarly,
all of the application servers for a node automatically inherit the SSL configuration
for that node unless you override these assignments. Unless you override a
specific configuration, the topology relies on the rules of inheritance from
the cell level down to the endpoint level for each application server.
The topology view displays an inbound tree and outbound tree. You can
make different SSL configuration selections for each side of the SSL connection
based on what that server connects to as an outbound connection and what the
server connects to as an inbound connection. See Central management of Secure Sockets Layer configurations for more information.
The runtime uses an order of precedence for determining
which SSL configuration to choose because you have many ways to select SSL
configurations. Consider the following order of precedence when you select
a configuration approach:
- Programmatic selection. If an application sets an SSL configuration on
the running thread using the com.ibm.websphere.ssl.JSSEHelper application
programming interface (API), the SSL configuration is guaranteed the highest
precedence.
- Dynamic selection criteria for outbound host and port or protocol.
- Direct selection.
- Scope selection. Scope inheritance guarantees that the endpoint that you
select is associated with an SSL configuration and is inherited by every scope
beneath it that does not override this selection.
Default self-signed certificate configuration
By
default, WebSphere Application Server creates a unique self-signed certificate
for each node. WebSphere Application Server no longer relies on the default
or dummy certificate that is shipped with the product. The key.p12 default
keystore and the trust.p12 truststore are stored in the configuration repository
within the node directory.
All of the nodes put their signer certificates in this common
truststore (trust.p12). Additionally, after you federate a node,
the default SSL configuration is automatically modified to point to the common
truststore, which is located in the cell directory. The node can now communicate
with all other servers in the cell.
All default SSL configurations contain
a keystore with the name suffix DefaultKeyStore and a truststore with the
name suffix DefaultTrustStore. These default suffixes instruct the WebSphere
Application Server runtime to add the signer of the personal certificate to
the common truststore. If a keystore name does not end with DefaultKeyStore,
the keystore signer certificates are not added to the common truststore when
you federate the server. You can change the default SSL configuration, but
ensure that the correct trust is established for administrative connections,
among others.
For more information, see Default self-signed certificate configuration and Web server plug-in default configuration.
Certificate expiration monitoring
Certificate monitoring
ensures that the self-signed certificate for each node is not allowed to expire.
The certificate expiration monitoring function issues a warning before certificates
and signers are set to expire. Those certificates and signers that are located
in keystores managed by the WebSphere Application Server configuration can
be monitored. You can configure the expiration monitor to automatically replace
a self-signed certificate with a new self-signed certificate that is based
upon the same data that is used for the initial creation. The monitor also
can automatically replace old signers with the signers from the new self-signed
certificates in keystores that are managed by WebSphere Application Server.
The existing signer exchanges that occurred by the runtime during federation
and by administration are preserved. For more information, see Certificate expiration monitoring.
WebSphere Application Server clients: signer-exchange requirements
A
new self-signed certificate is generated for each node during its initial
startup. To ensure trust, clients must be given these generated signers to
establish a connection. Several enhancements in the current release make this
process simpler. You can gain access to the signer certificates of various
nodes to which the client must connect with any one of the following options
(for more information, see Secure installation for client signer retrieval):
- A signer exchange prompt enables you to import signer certificates that
are not yet present in the truststores during a connection to a server. By
default, this prompt is enabled for administrative connections and can be
enabled for any client SSL configuration. When this prompt is enabled, any
connection that is made to a server where the signer is not already present
offers the signer of the server along with the certificate information and
a Secure Hash Algorithm (SHA) digest of the certificate for verification.
The user is given a choice whether to accept these credentials. If the credentials
are accepted, the signer is added to the truststore of the client until the
signer is explicitly removed. The signer exchange prompt does not occur again
when connecting to the same server unless the personal certificate changes. Attention: It is unsafe to trust a signer exchange prompt without verifying
the SHA digest. An unverified prompt can originate from a browser when a certificate
is not trusted.
- You can run a retrieveSigners administrative script from a client prior
to making connections to servers. To download signers, no administrative authority
is required. To upload signers, have Administrator role authority.
The script downloads all of the signers from a specified server truststore
into the specified client truststore and can be called to download only a
specific alias from a truststore. You can also call the script to upload signers
to server truststores. When you select the CellDefaultTrustStore truststore
as the specified server truststore and common truststore for a cell, all of
the signers for that cell are downloaded to the specified client truststore,
which is typically ClientDefaultTrustStore. For more information, see retrieveSigners command.
- You can physically distribute to clients the trust.p12 common truststore
that is located in the cell directory of the configuration repository. When
doing this distribution, however, ensure that the correct password
has been specified in the ssl.client.props client SSL configuration
file. The default password for this truststore is WebAS. Change the
default password prior to distribution. Physical distribution is not as effective
as the previous options. When changes are made to the personal certificates
on the server, automated exchange can fail.
Dynamic SSL configuration changes
The SSL runtime for
WebSphere Application Server maintains listeners for most SSL connections.
A change to the SSL configuration causes the inbound connection listeners
to create a new SSLContext object. Existing connections continue to use the
current SSLContext object. Outbound connections automatically use the new
configuration properties when they are attempted.
Make dynamic changes
to the SSL configuration during off-peak hours to reduce the possibility of
timing-related problems and to prevent the possibility of the server starting
again. If you enable the runtime to accept dynamic changes, then change the
SSL configuration and save the security.xml file. Your changes take
effect when the new security.xml file reaches each node.
Note: If configuration changes cause SSL handshake
failures, administrative connectivity failures also can occur, which can lead
to outages. In this case, re-configure the SSL connections then perform
manual node synchronization to correct the problem. You must carefully complete
any dynamic changes. It is highly recommended that you perform changes to
SSL configurations on a test environment prior to making the same changes
to a production system. For more information, see Dynamic configuration updates.
Built-in certificate management
Certificate management
that is comparable to iKeyMan functionality is now integrated into the keystore
management panels of the administrative console. Use built-in certificate
management to manage personal certificates, certificate requests, and signer
certificates that are located in keystores. Additionally, you can remotely
manage keystores. For example, you can manage a file-based keystore that is
located outside the configuration repository on any node from the deployment
manager. You also can remotely manage hardware cryptographic keystores from
the deployment manager.
With built-in certificate management, you can replace
a self-signed certificate along with all of the signer certificates scattered
across many truststores and retrieve a signer from a remote port by connecting
to the remote SSL host and port and intercepting the signer during the handshake.
The certificate is first validated according to the certificate SHA digest,
then the administrator must accept the validated certificate before it can
be placed into a truststore.
When you make a certificate request, you
can send it to a certificate authority (CA). When the certificate is returned,
you can accept it within the administrative console. For more information,
see Certificate management .
Although
iKeyMan functionality still ships with WebSphere Application Server, configure
keystores from the administrative console using the built-in certificate management
functionality. iKeyMan is still an option when it is not convenient to use
the administrative console. For more information, see Certificate management using iKeyman.
AdminTask configuration management
The SSL configuration
management panels in the administrative console rely primarily on administrative
tasks, which are maintained and enhanced to support the administrative console
function. You can use wsadmin commands from a Java console prompt to automate
the management of keystores, SSL configurations, certificates, and so on.
Sub-topics
Secure Sockets Layer configurations
Keystore configurations
Dynamic outbound selection of Secure Sockets Layer configurations
Central management of Secure Sockets Layer configurations
Secure Sockets Layer node, application server, and cluster isolation
Default self-signed certificate configuration
Dynamic configuration updates
Management scope configurations
Certificate management using iKeyman
Certificate management
Using the retrieveSigners command to enable server to server trust
Related concepts
Trust manager control of X.509 certificate trust decisions
Key manager control of X.509 certificate identities