type=page
status=published
title=Administering Message Security
next=security-in-cluster-mode.html
prev=user-security.html
~~~~~~

= Administering Message Security

[[GSSCG00037]][[ablrk]]


[[administering-message-security]]
== 3 Administering Message Security

This chapter provides information and procedures on configuring the
message layer security for web services in the {productName} environment.

[NOTE]
====
Message security (JSR 196) is supported only in the Full Platform
Profile of {productName}, not in the Web Profile.
====

The following topics are addressed here:

* link:#ablrn[About Message Security in {productName}]
* link:#giood[Enabling Default Message Security Providers for Web Services]
* link:#giouf[Configuring Message Protection Policies]
* link:#giosl[Administering Non-default Message Security Providers]
* link:#gdhgg[Enabling Message Security for Application Clients]
* link:#gglrb[Additional Information About Message Security]

Some of the material in this chapter assumes a basic understanding of
security and web services concepts. For more information about security,
see link:system-security.html#ggktf[About System Security in {productName}].

Instructions for accomplishing the tasks in this chapter by using the
Administration Console are contained in the Administration Console online help.

[[ablrn]][[GSSCG00153]][[about-message-security-in-glassfish-server]]

=== About Message Security in {productName}

Message security enables a server to perform end-to-end authentication
of web service invocations and responses at the message layer. Security
information is inserted into messages so that it travels through the
networking layers and arrives with the intact message at the message
destination(s). Message security differs from transport layer security
in that message security can be used to decouple message protection from
message transport so that messages remain protected after transmission.

Web services deployed on {productName} are secured by binding SOAP
layer message security providers and message protection policies to the
containers in which the applications are deployed, or to web service
endpoints served by the applications. SOAP layer message security
functionality is configured in the client-side containers of {productName} by binding SOAP layer message security providers and message
protection policies to the client containers or to the portable service
references declared by client applications.

Message-level security can be configured for the entire {productName}
or for specific applications or methods. Configuring message security at
the application level is discussed in the
link:application-development-guide.html#GSDVG[
{productName} Application Development Guide].

The following topics are addressed here:

* link:#ablrs[Security Tokens and Security Mechanisms]
* link:#ablrx[Authentication Providers]
* link:#ablrw[Message Protection Policies]
* link:#ablrz[Application-Specific Web Services Security]
* link:#gioom[Message Security Administration]
* link:#ablsa[Sample Application for Web Services]

[[ablrs]][[GSSCG00218]][[security-tokens-and-security-mechanisms]]

==== Security Tokens and Security Mechanisms

WS-Security is a specification that provides a communications protocol
for applying security to web services. The security mechanisms implement
the specification. Web Services Interoperability Technologies (WSIT)
implements WS-Security so as to provide interoperable message content
integrity and confidentiality, even when messages pass through
intermediary nodes before reaching their destination endpoint.
WS-Security as provided by WSIT is in addition to existing
transport-level security, which can still be used.

The Simple Object Access Protocol (SOAP) layer message security
providers installed with {productName} can be used to employ
username/password and X.509 certificate security tokens to authenticate
and encrypt SOAP web services messages.

* Username Tokens. {productName} uses username tokens in SOAP
messages to authenticate the message sender. The recipient of a message
containing a username token (within embedded password) validates that
the message sender is authorized to act as the user (identified in the
token) by confirming that the sender knows the password of the user.
+
When using a username token, a valid user database must be configured on
{productName}.
* Digital Signatures. {productName} uses XML digital signatures to
bind an authentication identity to message content. Clients use digital
signatures to establish their caller identity. Digital signatures are
verified by the message receiver to authenticate the source of the
message content (which might be different from the sender of the
message.)
+
When using digital signatures, valid keystore and truststore files must
be configured on {productName}.
* Encryption. The purpose of encryption is to modify the data so that it
can only be understood by its intended audience. This is accomplished by
substituting an encrypted element for the original content. When based
on public key cryptography, encryption can be used to establish the
identity of the parties who are authorized to read a message.
+
When using encryption, a Java Cryptography Extension (JCE) provider that
supports encryption must be installed.

[[ablrx]][[GSSCG00219]][[authentication-providers]]

==== Authentication Providers

The authentication layer is the message layer on which authentication
processing must be performed. {productName} enforces web services
message security at the SOAP layer. The types of authentication that are
supported include the following:

* Sender authentication, including username-password authentication
* Content authentication, including XML digital signatures

{productName} invokes authentication providers to process SOAP
message layer security. The message security providers provide
information such as the type of authentication that is required for the
request and response messages. The following message security providers
are included with {productName}:

* Client-side Provider. A client-side provider establishes (by signature
or username/password) the source identity of request messages and/or
protects (by encryption) request messages such that they can only be
viewed by their intended recipients. A client-side provider also
establishes its container as an authorized recipient of a received
response (by successfully decrypting it) and validates passwords or
signatures in the response to authenticate the source identity
associated with the response. Client-side providers configured in
{productName} can be used to protect the request messages sent and
the response messages received by server-side components (servlets and
EJB components) acting as clients of other services.
+
The default client provider is used to identify the client—side provider
to be invoked for any application for which a specific client provider
has not been bound.
* Server-side Provider. A server-side provider establishes its container
as an authorized recipient of a received request (by successfully
decrypting it), and validates passwords or signatures in the request to
authenticate the source identity associated with the request. A
server-side provider also establishes (by signature or
username/password) the source identity of response messages and/or
protects (by encryption) response messages such that they can only be
viewed by their intended recipients. Server-side providers are only
invoked by server-side containers.

The default server provider is used to identify the server—side provider
to be invoked for any application for which a specific server provider
has not been bound.

[[ablrw]][[GSSCG00220]][[message-protection-policies]]

==== Message Protection Policies

A request policy defines the authentication policy requirements
associated with request processing performed by the authentication
provider. Policies are expressed in message sender order such that a
requirement that encryption occur after content would mean that the
message receiver would expect to decrypt the message before validating
the signature. The response policy defines the authentication policy
requirements associated with response processing performed by the
authentication provider.

Message protection policies are defined for request message processing
and response message processing. The policies are expressed in terms of
requirements for source and/or recipient authentication. The providers
apply specific message security mechanisms to cause the message
protection policies to be realized in the context of SOAP web services
messages.

* Source Authentication Policy. A source authentication policy
represents a requirement that the identity of the entity that sent a
message or that defined the content of a message be established in the
message such that it can be authenticated by the message receiver.
* Recipient Authentication Policy. A recipient authentication policy
represents a requirement that the message be sent such that the identity
of the entities that can receive the message can be established by the
message sender.

Request and response message protection policies are defined when a
security provider is configured into a container. Application-specific
message protection policies (at the granularity of the web service port
or operation) can also be configured within the {productName}
deployment descriptors of the application or application client. In any
situation where message protection policies are defined, the request and
response message protection policies of the client must be equivalent t)
the request and response message protection policies of the server. For
more information about defining application-specific message protection
policies, see "link:application-development-guide/securing-apps.html#GSDVG00006[Securing Applications]" in {productName} Application Development Guide.

[[ablrz]][[GSSCG00221]][[application-specific-web-services-security]]

==== Application-Specific Web Services Security

Application-specific web services security functionality is configured
(at application assembly) by defining the `message-security-binding`
elements in the {productName} deployment descriptors of the
application. These `message-security-binding` elements are used to
associate a specific security provider or message protection policy with
a web service endpoint or service reference, and might be qualified so
that they apply to a specific port or method of the corresponding
endpoint or referenced service.

For information about defining application-specific message protection
policies, see "link:application-development-guide/securing-apps.html#GSDVG00006[Securing Applications]" in {productName} Application Development Guide.

[[gioom]][[GSSCG00222]][[message-security-administration]]

==== Message Security Administration

When {productName} is installed, SOAP layer message security
providers are configured in the client and server-side containers of
{productName}, where they are available for binding for use by the
containers, or by individual applications or clients deployed in the
containers. During installation, the default providers are configured
with a simple message protection policy that, if bound to a container,
or to an application or client in a container, would cause the source of
the content in all request and response messages to be authenticated by
XML digital signature.

{productName} administrative interfaces can be used as follows:

* To modify the message protection policies enforced by the providers
* To bind the existing providers for use by the server-side containers
of {productName}
* To create new security provider configurations with alternative
message protection policies

Analogous administrative operations can be performed on the SOAP message
layer security configuration of the application client container. If you
want web services security to protect all web services applications
deployed on {productName}. See link:#gdhgg[Enabling Message Security
for Application Clients].

By default, message layer security is disabled on {productName}. To
configure message layer security for the {productName} see
link:#giood[Enabling Default Message Security Providers for Web
Services].

In most cases, you must restart {productName} after performing
administrative tasks. This is especially true if you want the effects of
the administrative change to be applied to applications that were
already deployed on {productName} at the time the operation was
performed.

[[giose]][[GSSCG00199]][[message-security-tasks]]

===== Message Security Tasks

The general implementation tasks for message security include some or
all of the following:

1. If you are using a version of the Java SDK prior to version 1.5.0,
   and using encryption technology, configuring a JCE provider
2. If you are using a username token, verifying that a user database is
   configured for an appropriate realm
+
When using a username/password token, an appropriate realm must be
   configured and a user database must be configured for the realm.
3. Managing certificates and private keys, if necessary
4. Enabling the {productName} default providers
5. Configuring new message security providers

[[ablro]][[GSSCG00200]][[message-security-roles]]

===== Message Security Roles

In {productName}, the administrator and the application deployer are
expected to take primary responsibility for configuring message
security. In some situations, the application developer might also
contribute.

[[ablrp]][[GSSCG00057]][[system-administrator]]

System Administrator

The system administrator is responsible for the following message
security tasks:

* Administering server security settings and certificate databases
* Administering keystore and truststore files
* Configuring message security providers on {productName}
* Turning on message security
* (If needed) Installing the samples server

[[ablrq]][[GSSCG00058]][[application-deployer]]

Application Deployer

The application deployer is responsible for the following message
security tasks:

* Specifying (at application reassembly) any required
application-specific message protection policies if such policies have
not already been specified by the developer/assembler.
* Modifying {productName} deployment descriptors to specify
application-specific message protection policies information
(message-security-binding elements) to web service endpoint and service references.

[[ablrr]][[GSSCG00059]][[application-developerassembler]]

Application Developer/Assembler

The application developer/assembler is responsible for the following
message security tasks:

* Determining if an application-specific message protection policy is
required by the application
+
If so, the developer ensures that the required policy is specified at
application assembly time.
* Specifying how web services should be set up for message security
+
Message security can be set up by the administrator so that all web
services are secured, or by the application deployer when the security
provider or protection policy bound to the application must be different
from that bound to the container.
* Turning on message security if authorized to do so by the administrator

[[ablsa]][[GSSCG00223]][[sample-application-for-web-services]]

==== Sample Application for Web Services

{productName} includes a sample application named `xms`. The `xms`
application features a simple web service that is implemented by both a
Jakarta EE EJB endpoint and a Java servlet endpoint. Both endpoints share
the same service endpoint interface. The service endpoint interface
defines a single operation, `sayHello`, which takes a string argument,
and returns a `String` composed by pre-pending `Hello` to the invocation argument.

The `xms` sample application is provided to demonstrate the use of
{productName} WS-Security functionality to secure an existing web
services application. The instructions which accompany the sample
describe how to enable the WS-Security functionality of {productName}
such that it is used to secure the `xms` application. The sample also
demonstrates the binding of WS-Security functionality directly to the
application as described in link:#ablrz[Application-Specific Web
Services Security] application.

For information about compiling, packaging, and running the `xms` sample
application, "link:application-development-guide/securing-apps.html#GSDVG00006[
Securing Applications]" in
{productName} Application Development Guide.

The `xms` sample application is installed in the following directory:
as-install``/samples/webservices/security/ejb/apps/xms/``

[[giood]][[GSSCG00154]][[enabling-default-message-security-providers-for-web-services]]

=== Enabling Default Message Security Providers for Web Services

By default, message security is disabled on {productName}. Default
message security providers have been created, but are not active until
you enable them. After the providers have been enabled, message security
is enabled.

The following topics are addressed here:

* link:#giork[To Enable a Default Server Provider]
* link:#giort[To Enable a Default Client Provider]

[[giork]][[GSSCG00123]][[to-enable-a-default-server-provider]]

==== To Enable a Default Server Provider

To enable message security for web services endpoints deployed in
{productName}, you must specify a security provider to be used by
default on the server side. If you enable a default provider for message
security, you also need to enable providers to be used by clients of the
web services deployed in {productName}.

1. Specify the default server provider by using the
link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
Use the following syntax:
+
[source]
----
asadmin set --port admin-port
server-config.security-service.message-security-config.SOAP.
default_provider=ServerProvider
----
2. To apply your changes to applications that are already running,
restart {productName}.
+
See "link:administration-guide/domains.html#GSADG00337[To Restart a Domain]" in {productName} Administration Guide.

[[giort]][[GSSCG00124]][[to-enable-a-default-client-provider]]

==== To Enable a Default Client Provider

To enable message security for web service invocations originating from
deployed endpoints, you must specify a default client provider. If you
enabled a default client provider for {productName}, you must ensure
that any services invoked from endpoints deployed in {productName}
are compatibly configured for message layer security.

1. Specify the default client provider by using the
link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
Use the following syntax:
+
[source]
----
asadmin set --port admin-port
server-config.security-service.message-security-config.SOAP.
default_client_provider=ClientProvider
----
2. To apply your changes to applications that are already running,
restart {productName}.
+
See "link:administration-guide/domains.html#GSADG00337[To Restart a Domain]" in {productName} Administration Guide.

[[giouf]][[GSSCG00155]][[configuring-message-protection-policies]]

=== Configuring Message Protection Policies

Message protection policies are defined for request message processing
and response message processing. The policies are expressed in terms of
requirements for source and/or recipient authentication. The providers
apply specific message security mechanisms to cause the message
protection policies to be realized in the context of SOAP web services
messages.

The following topics are addressed here:

* link:#giraj[Message Protection Policy Mapping]
* link:#gioqu[To Configure the Message Protection Policies for a
Provider]
* link:#ablsl[Setting the Request and Response Policy for the
Application Client Configuration]

[[giraj]][[GSSCG00224]][[message-protection-policy-mapping]]

==== Message Protection Policy Mapping

The following table shows message protection policy configurations and
the resulting message security operations performed by the WS-Security
SOAP message security providers for that configuration.

[[sthref30]][[fxjcu]]

Table 3-1 Message Protection Policy Mapping to WS-Security SOAP Operations

[width="100%",cols="34%,66%",options="header",]
|===
|Message Protection Policy |Resulting WS-Security SOAP Message Protection Operations

|auth-source="sender"
|The message contains a `wsse:Security` header that contains
a `wsse:UsernameToken` (with password).

|auth-source="content"
|The content of the SOAP message Body is signed.
The message contains a `wsse:Security` header that contains the message
Body signature represented as a `ds`:`Signature`.

a|auth-source="sender" +
auth-recipient="before-content" +
OR +
auth-recipient="after-content"
|The content of the SOAP message Body is encrypted and replaced with
the resulting `xend:EncryptedData`. The message contains
`a wsse:Security` header that contains a
`wsse:UsernameToken (with password)` and an `xenc:EncryptedKey`. The
`xenc:EncryptedKey` contains the key used to encrypt the SOAP message
body. The key is encrypted in the public key of the recipient.

a|auth-source="content" +
auth-recipient="before-content"
|The content of the SOAP message Body is encrypted and replaced with
the resulting `xend:EncryptedData`. The `xenc:EncryptedData` is signed.
The message contains `a wsse:Security` header that contains an
`xenc:EncryptedKey` and a `ds`:`Signature`. The `xenc:EncryptedKey`
contains the key used to encrypt the SOAP message body. The key is
encrypted in the public key of the recipient.

a|
auth-source="content" +
auth-recipient="after-content"
|The content of the SOAP message Body is signed, then encrypted, and
then replaced with the resulting `xend:EncryptedData`. The message
contains a `wsse:Security` header that contains an `xenc:EncryptedKey`
and a `ds:Signature`. The `xenc:EncryptedKey` contains the key used to
encrypt the SOAP message body. The key is encrypted in the public key of
the recipient.

a|auth-recipient="before-content" +
OR +
auth-recipient="after-content"
|The content of the SOAP message Body is encrypted and replaced with
the resulting `xend:EncryptedData`. The message contains
`a wsse:Security` header that contains an `xenc:EncryptedKey`.
The `xenc:EncryptedKey` contains the key used to encrypt the SOAP message
body. The key is encrypted in the public key of the recipient.
|No policy specified. |No security operations are performed by the modules.
|===


[[gioqu]][[GSSCG00125]][[to-configure-the-message-protection-policies-for-a-provider]]

==== To Configure the Message Protection Policies for a Provider

Typically, you would not reconfigure a provider. However, if needed for
your situation, you can modify a provider's message protection policies
by changing provider type, implementation class, and provider-specific
configuration properties. To understand the results of different
combinations, see link:#fxjcu[Table 3-1].

Use the link:reference-manual/set.html#GSRFM00226[`set`] subcommand to set the response policy,
then replace the word `request` in the following commands with the word
`response`.

1. Add a request policy to the client and set the authentication source
by using the link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
For example:
+
[source]
----
asadmin> set server-config.security-service.message-security-config.SOAP.
provider-config.ClientProvider.request-policy.auth_source=[sender | content]
----
2. Add a request policy to the server and set the authentication source
by using the `set` subcommand.
+
For example:
+
[source]
----
asadmin> set server-config.security-service.message-security-config.SOAP.
provider-config.ServerProvider.request-policy.auth_source=[sender | content]
----
3. Add a request policy to the client and set the authentication
recipient by using the `set` subcommand:
+
For example:
+
[source]
----
asadmin> set server-config.security-service.message-security-config.SOAP.
provider-config.ClientProvider.request-policy.auth_recipient=[before-content | after-content]
----
4. Add a request policy to the server and set the authentication
recipient by using the `set` subcommand:
+
For example:
+
[source]
----
asadmin> set server-config.security-service.message-security-config.SOAP.
provider-config.ServerProvider.request-policy.auth_recipient=[before-content | after-content]
----

[[ablsl]][[GSSCG00225]][[setting-the-request-and-response-policy-for-the-application-client-configuration]]

==== Setting the Request and Response Policy for the Application Client Configuration

The request and response policies define the authentication policy
requirements associated with request and response processing performed
by the authentication provider. Policies are expressed in message sender
order such that a requirement that encryption occur after content would
mean that the message receiver would expect to decrypt the message
before validating the signature.

To achieve message security, the request and response policies must be
enabled on both the server and client. When configuring the policies on
the client and server, make sure that the client policy matches the
server policy for request/response protection at application-level
message binding.

To set the request policy for the application client configuration,
modify the {productName}-specific configuration for the application
client container as described in link:#gdhgg[Enabling Message Security
for Application Clients].

[[GSSCG00088]][[gipxo]]
Example 3-1 Message Security Policy Setting for Application Clients

In the application client configuration file, the `request-policy` and
`response-policy` elements are used to set the request policy, as shown
in the following code snippet. (Additional code in the snippet is
provided as illustration and might differ slightly in your installation.
Do not change the additional code.)

[source,xml]
----
<client-container>
  <target-server name="your-host" address="your-host"
      port="your-port"/>
  <log-service file="" level="WARNING"/>
  <message-security-config auth-layer="SOAP"
      default-client-provider="ClientProvider">
    <provider-config
        class-name="com.sun.enterprise.security.jauth.ClientAuthModule"
        provider-id="clientprovider" provider-type="client">
      <request-policy auth-source="sender | content"
        auth-recipient="after-content | before-content"/>
      <response-policy auth-source="sender | content"
        auth-recipient="after-content | before-content"/>
       <property name="security.config"
           value="as-install/lib/appclient/wss-client-config.xml"/>
    </provider-config>
  </message-security-config>
</client-container>
----

Valid values for `auth-source` include `sender` and `content`. Valid
values for `auth-recipient` include `before-content` and
`after-content`. A table describing the results of various combinations
of these values can be found in link:#giouf[Configuring Message
Protection Policies].

To not specify a request or response policy, leave the element blank,
for example:

[source,xml]
----
<response-policy/>
----

[[giosl]][[GSSCG00156]][[administering-non-default-message-security-providers]]

=== Administering Non-default Message Security Providers

The following topics are addressed here:

* link:#giory[To Create a Message Security Provider]
* link:#giotv[To List Message Security Providers]
* link:#giwkd[To Update a Message Security Provider]
* link:#giorr[To Delete a Message Security Provider]
* link:#gkxru[To Configure a Servlet Layer Server Authentication Module
(SAM)]

[[giory]][[GSSCG00126]][[to-create-a-message-security-provider]]

==== To Create a Message Security Provider

Use the `create-message-security-provider` subcommand in remote mode to
create a new message provider for the security service. If the message
layer does not exist, the message layer is created, and the provider is
created under it.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create the message security provider by using the
link:reference-manual/create-message-security-provider.html#GSRFM00045[`create-message-security-provider`] subcommand.
+
Information about properties for this subcommand is included in the help
page.
3. If needed, restart the server.
+
Some properties require server restart. See
"link:administration-guide/overview.html#GSADG00628[Configuration Changes That Require Restart]" in
{productName} Administration Guide. If your
server needs to be restarted, see "link:administration-guide/domains.html#GSADG00337[To Restart a
Domain]" in {productName} Administration Guide.

[[GSSCG00089]][[giosd]]
Example 3-2 Creating a Message Security Provider

This example creates the new message security provider
`mySecurityProvider`.

[source]
----
asadmin> create-message-security-provider
--classname com.sun.enterprise.security.jauth.ClientAuthModule
--providertype client mySecurityProvider
Command create-message-security-provider executed successfully.
----

[[sthref31]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-message-security-provider` at the command
line.

[[giotv]][[GSSCG00127]][[to-list-message-security-providers]]

==== To List Message Security Providers

Use the `list-message-security-providers` subcommand in remote mode to
list the message providers for the security layer.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List the message security providers by using the
link:reference-manual/list-message-security-providers.html#GSRFM00184[`list-message-security-providers`] subcommand.

[[GSSCG00090]][[gioui]]
Example 3-3 Listing Message Security Providers

This example lists the message security providers for a message layer.

[source]
----
asadmin> list-message-security-providers --layer SOAP
XWS_ClientProvider
ClientProvider
XWS_ServerProvider
ServerProvider
Command list-message-security-providers executed successfully.
----

[[sthref32]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-message-security-providers` at the command
line.

[[giwkd]][[GSSCG00128]][[to-update-a-message-security-provider]]

==== To Update a Message Security Provider

1. Ensure that the server is running. Remote subcommands require a running server.
2. List the message security providers by using the
link:reference-manual/list-message-security-providers.html#GSRFM00184[`list-message-security-providers`] subcommand.
3. Modify the values for the specified message security provider by
using the link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
The message security provider is identified by its dotted name.

[[giorr]][[GSSCG00129]][[to-delete-a-message-security-provider]]

==== To Delete a Message Security Provider

Use the `delete-message-security-provider` subcommand in remote mode to
remove a message security provider.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List the message security providers by using the
link:reference-manual/list-message-security-providers.html#GSRFM00184[`list-message-security-providers`] subcommand.
3. Delete the message security provider by using the
link:reference-manual/delete-message-security-provider.html#GSRFM00097[`delete-message-security-provider`] subcommand.

[[GSSCG00091]][[gioug]]
Example 3-4 Deleting a Message Security Provider

This example deletes the `myServerityProvider` message security
provider.

[source]
----
asadmin> delete-message-security-provider --layer SOAP myServerityProvider
Command delete-message-security-provider executed successfully.
----

[[sthref33]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-message-security-provider` at the command
line.

[[gkxru]][[GSSCG00130]][[to-configure-a-servlet-layer-server-authentication-module-sam]]

==== To Configure a Servlet Layer Server Authentication Module (SAM)

You configure a JSR 196 Server Authentication Module (SAM) as an
HttpServlet-layer message security provider, either through the
Administration Console or with the `create-message-security-provider`
subcommand.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create the message security provider by using the
link:reference-manual/create-message-security-provider.html#GSRFM00045[`create-message-security-provider`] subcommand.
+
Information about properties for this subcommand is included in the help page.
3. Bind the message security provider for use with your application.
+
You do this by defining the `httpservlet-security-provider` attribute in
the `glassfish-web.xml` file corresponding to your application. Set the
value of the attribute to the provider name you assigned to the message
security provider. For example, if you use MySAM when you create the
message security provider the entry would be
httpservlet-security-provider="MySAM".
4. If needed, restart the server.
+
Some properties require server restart. See
"link:administration-guide/overview.html#GSADG00628[Configuration Changes That Require Restart]" in
{productName} Administration Guide. If your
server needs to be restarted, see "link:administration-guide/domains.html#GSADG00337[To Restart a
Domain]" in {productName} Administration Guide.

[[GSSCG00092]][[gkxqz]]
Example 3-5 Creating a Message Security Provider

This example creates the new message security provider `mySAM`.

[source]
----
asadmin> create-message-security-provider --layer=HttpServlet
--classname com.sun.glassfish.oamsam.OAMAuthenticatorSAM
--providertype server
--property oam.resource.hostid.variation="your-host-system.com" mySAM
Creation of message security provider named mySAM completed successfully
Command create-message-security-provider executed successfully.
----

The subcommand results in the following `domain.xml` entry:

[source,xml]
----
<message-security-config auth-layer="HttpServlet">
<provider-config provider-type="server" provider-id="mysam"
class-name="com.sun.glassfish.oamsam.OAMAuthenticatorSAM">
            <property name="oam.resource.hostid.variation" value="your-host-system.com"></property>
            <request-policy></request-policy>
            <response-policy></response-policy>
          </provider-config>
</message-security-config>
----

To list the HttpServlet message security providers, use the
`list-message-security-providers` subcommand:

[source]
----
asadmin> list-message-security-providers --layer HttpServlet
list-message-security-providers successful
GFConsoleAuthModule
mySAM
Command list-message-security-providers executed successfully.
----

[[sthref34]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-message-security-provider` at the command line.

[[gdhgg]][[GSSCG00157]][[enabling-message-security-for-application-clients]]

=== Enabling Message Security for Application Clients

The message protection policies of client providers must be configured
such that they are equivalent to the message protection policies of the
server-side providers they will be interacting with. This is already the
situation for the providers configured (but not enabled) when {productName} is installed.

To enable message security for client applications, modify the {productName} specific configuration for the application client container. The
process is analogous to the process in link:#giouf[Configuring Message
Protection Policies].

[[gglrb]][[GSSCG00158]][[additional-information-about-message-security]]

=== Additional Information About Message Security

For additional information about message security, see the following documentation:

* https://eclipse-ee4j.github.io/jakartaee-tutorial/#security-2[
Introduction to Security in the Jakarta EE Platform] in The Jakarta EE Tutorial
* "link:application-development-guide/securing-apps.html#GSDVG00006[Securing Applications]"
in {productName} Application Development Guide


