| type=page |
| status=published |
| title=Administering System Security |
| next=user-security.html |
| prev=preface.html |
| ~~~~~~ |
| |
| = Administering System Security |
| |
| [[GSSCG00035]][[ablnk]] |
| |
| |
| [[administering-system-security]] |
| == 1 Administering System Security |
| |
| This chapter describes general information about administering system security. |
| |
| The following topics are addressed here: |
| |
| * link:#ggktf[About System Security in {productName}] |
| * link:#ghgrp[Administering Passwords] |
| * link:#ghgol[Administering Audit Modules] |
| * link:#ablqz[Administering JSSE Certificates] |
| * link:#gkngj[Administering JACC Providers] |
| |
| Instructions for accomplishing many of these tasks by using the |
| Administration Console are contained in the Administration Console |
| online help. |
| |
| Information on application security is contained in |
| "link:application-development-guide/securing-apps.html#GSDVG00006[Securing Applications]" |
| in {productName} Application Development Guide. |
| |
| [[ggktf]][[GSSCG00143]][[about-system-security-in-glassfish-server]] |
| |
| === About System Security in {productName} |
| |
| Security is about protecting data, that is, how to prevent unauthorized |
| access or damage to data that is in storage or in transit. The {productName} is built on the Java security model, which uses a sandbox where |
| applications can run safely, without potential risk to systems or users. |
| System security affects all the applications in the {productName} environment. |
| |
| The Jakarta EE Security API specification defines portable, plug-in |
| interfaces for authentication and identity stores, and a new |
| injectable-type SecurityContext interface that provides an access point |
| for programmatic security. You can use the built-in implementations of |
| the plug-in SPIs, or write custom implementations. |
| |
| System security features include the following: |
| |
| * link:#ablnx[Authentication] |
| * link:#ghlvu[Authorization] |
| * link:#ghlql[Auditing] |
| * link:#ghlti[Firewalls] |
| * link:#abloj[Certificates and SSL] |
| * link:#ablno[Tools for Managing System Security] |
| |
| [[ablnx]][[GSSCG00203]][[authentication]] |
| |
| ==== Authentication |
| |
| Authentication is the way in which an entity (a user, an application, or |
| a component) determines that another entity is who it claims to be. An |
| entity uses security credentials to authenticate itself. The credentials |
| might be a user name and password, a digital certificate, or something |
| else. Usually, servers or applications require clients to authenticate |
| themselves. Additionally, clients might require servers to authenticate |
| themselves. When authentication is bidirectional, it is called mutual |
| authentication. |
| |
| When an entity tries to access a protected resource, {productName} |
| uses the authentication mechanism configured for that resource to |
| determine whether to grant access. For example, a user can enter a user |
| name and password in a web browser, and if the application verifies |
| those credentials, the user is authenticated. The user is associated |
| with this authenticated security identity for the remainder of the session. |
| |
| [[ghsqc]][[GSSCG00184]][[authentication-types]] |
| |
| ===== Authentication Types |
| |
| Within its deployment descriptors, an application can specify the type |
| of authentication that it uses. The Jakarta EE Security API provides an |
| alternative mechanism for configuring the type of authentication an |
| application uses. See https://jcp.org/en/jsr/detail?id=375[Jakarta EE |
| Security API 1.0 specification]. {productName} supports specifying |
| the following types of authentication in deployment descriptors: |
| |
| BASIC:: |
| Uses the standard Basic Authentication Scheme as described in RFC 2617. |
| The communication protocol is HTTP (SSL optional). There is no |
| encryption of user credentials unless using SSL. This type is not |
| considered to be a secure method of user authentication unless used in |
| conjunction with an encrypted communications channel, such as that |
| provided by SSL. |
| FORM:: |
| The application provides its own custom login and error pages. The |
| communication protocol is HTTP (SSL optional). There is no encryption |
| of user credentials unless using SSL. |
| CLIENT-CERT:: |
| The server authenticates the client using a public key certificate. |
| The communication protocol is HTTPS (HTTP over SSL). |
| DIGEST:: |
| The server authenticates a user based on a user name and a password. |
| Unlike BASIC authentication, the plaintext password is never sent over |
| the network, although a hash of the password combined with other |
| parameters is sent. While Digest Authentication is more secure than |
| Basic Authentication, user names and passwords are not strongly |
| protected, and the use of SSL is still recommended. |
| |
| [[sthref4]][[jsr-375-authentication-mechanisms-and-identity-stores]] |
| |
| ===== JSR 375 Authentication Mechanisms and Identity Stores |
| |
| The Jakarta EE Security API defines the `HttpAuthenticationMechanism` |
| interface, the `IdentityStore` and `IdentityStoreHandler` interfaces. |
| |
| The `HttpAuthenticationMechanism` interface defines an SPI for writing |
| authentication mechanisms that can be provided with an application and |
| deployed using CDI. Developers can write their own implementations of |
| `HttpAuthenticationMechanism` to support specific authentication token |
| types or protocols. There are also several built-in authentication |
| mechanisms that perform BASIC, FORM, and Custom FORM authentication. |
| The `HttpAuthenticationMechanism` interface defines three methods - |
| `validateRequest()`, `secureResponse()`, and `cleanSubject()`. |
| These methods align closely with the methods defined by the JASPIC |
| `ServerAuth` interface. |
| |
| The `IdentityStore` interface provides an abstraction of an identity |
| store that holds user account information including name, password, |
| group membership, and potentially other attributes. Implementations of |
| the `IdentityStore` interface are used to validate caller credentials, |
| typically username and password, and retrieve and group information. |
| There are built-in implementations of this SPI that can validate |
| credentials against external LDAP or Database identity stores. |
| |
| `IdentityStore` is intended primarily for use by |
| `HttpAuthenticationMechanism` implementations, but could be used by |
| other authentication mechanisms, such as a JASPIC `ServerAuthModule`, or |
| a container's built-in authentication mechanisms. Though |
| `HttpAuthenticationMechanism` implementations can authenticate users in |
| any manner they choose, the `IdentityStore` interface provides a |
| convenient mechanism. A significant advantage of using |
| `HttpAuthenticationMechanism` and `IdentityStore` over the declarative |
| mechanisms defined by the Servlet specification is that it allows an |
| application to control the identity stores that it authenticates |
| against, in a standard, portable way. You can use the built-in |
| implementations of theĀ plug-in SPIs, or define custom implementations. |
| |
| [[gknah]][[GSSCG00185]][[jsr-196-server-authentication-modules]] |
| |
| ===== JSR 196 Server Authentication Modules |
| |
| {productName} implements the Servlet Container Profile of |
| http://www.jcp.org/en/jsr/detail?id=196[JSR 196 Java Authentication |
| Service Provider Interface for Containers specification]. |
| |
| JSR 196 defines a standard service-provider interface (SPI) for |
| integrating authentication mechanism implementations in message |
| processing runtimes. JSR 196 extends the concepts of the Java |
| Authentication and Authorization Service (JAAS) to enable pluggability |
| of message authentication modules in message processing runtimes. The |
| standard defines profiles that establish contracts for the use of the |
| SPI in specific contexts. |
| |
| [[ghltx]][[GSSCG00186]][[passwords]] |
| |
| ===== Passwords |
| |
| Passwords are your first line of defense against unauthorized access to |
| the components and data of {productName}. For Information about how |
| to use passwords for {productName}, see link:#ghgrp[Administering |
| Passwords]. |
| |
| [[gczen]][[GSSCG00042]][[master-password-and-keystores]] |
| |
| ====== Master Password and Keystores |
| |
| The master password is not tied to a user account and it is not used for |
| authentication. Instead, {productName} uses the master password only |
| to encrypt the keystore and truststore for the DAS and instances. |
| |
| When you create a new {productName} domain, a new self-signed |
| certificate is generated and stored in the domain keystore and |
| truststore. The DAS needs the master password to open these stores at |
| startup. Similarly, the associated server instances need the master |
| password to open their copy of these stores at startup. |
| |
| If you use a utility such as keytool to modify the keystore or |
| truststore, you must provide the master password in that case as well. |
| |
| The master password is a shared password and must be the same for the |
| DAS and all instances in the domain in order to manage the instances |
| from the DAS. However, because {productName} never transmits the |
| master password over the network, it is up to you to keep the master |
| password in sync between the DAS and instances. |
| |
| If you change the master password, you can choose to enter the master |
| password manually when required, or save it in a file. |
| |
| [[gktgy]][[GSSCG00043]][[understanding-master-password-synchronization]] |
| |
| ====== Understanding Master Password Synchronization |
| |
| The master password is used encrypt the keystore and truststore for the |
| DAS and instances. The DAS needs the master password to open these |
| stores at startup. Similarly, the associated server instances need the |
| master password to open their copy of these stores at startup. |
| |
| {productName} keeps the keystore and truststore for the DAS and |
| instances in sync, which guarantees that all copies of the stores are |
| encrypted with the same master password at any given time. |
| |
| However, {productName} does not synchronize the master password |
| itself, and it is possible that the DAS and instances might attempt to |
| use different master passwords. |
| |
| Consider the following potential scenario: |
| |
| 1. You create a domain and instances, using the default master password |
| (changeit). As a result, the DAS and instances have keystores and |
| truststores encrypted using changeit. |
| 2. You use the `change-master-password` subcommand on the DAS to change |
| the master password to ichangedit. As a result, the DAS and instance |
| keystores and truststores are encrypted using ichangedit. |
| 3. Access to the keystore and truststore from an instance now requires |
| the master password ichangedit. You are responsible for changing the |
| master password as needed. |
| |
| If you do not use a master password file, you assume the responsibility |
| for using the `change-master-password` subcommand on the DAS and |
| instances to keep the master passwords in sync. Be aware that not using |
| a master password file has additional considerations for the |
| start-instance and start-cluster subcommands, as described in |
| link:#gktgr[Additional Considerations for the `start-instance` and |
| `start-cluster` Subcommands]. |
| |
| If you do use a master password file, you assume the responsibility for |
| using the `change-master-password` subcommand on the DAS and instances |
| to keep the master password file in sync. |
| |
| [[gktez]][[GSSCG00044]][[using-the-default-master-password]] |
| |
| ====== Using the Default Master Password |
| |
| {productName} uses the known phrase "changeit" as the default master |
| password. This master password is not stored in a file. The default |
| password is a convenience feature and provides no additional security |
| because it is assumed to be widely known. |
| |
| All {productName} subcommands work as expected with the default |
| master password and there are no synchronization issues. |
| |
| [[gktfy]][[GSSCG00045]][[saving-the-master-password-to-a-file]] |
| |
| ====== Saving the Master Password to a File |
| |
| The `change-master-password` `--savemasterpassword` option indicates |
| whether the master password should be written to the file system in the |
| `master-password` file for the DAS or a node. The default is false. |
| |
| For a domain, the master password is kept in |
| domain-dir``/master-password``. |
| |
| For a node, the master-password file is kept in |
| ``nodes/``node-name``/agent/master-password``. You can set a master password |
| at the node level and all instances created on that node will use that |
| master-password file. To do this, use the `--nodedir` option and provide |
| a node name. |
| |
| You might want to save the master password to the file so that the |
| `start-domain` subcommand can start the server without having to prompt |
| the user. There are additional considerations for using a master |
| password with the `start-instance` and `start-cluster` subcommands, as |
| described in link:#gktgr[Additional Considerations for the |
| `start-instance` and `start-cluster` Subcommands]. |
| |
| The master-password file is encoded, not encrypted. You must use |
| filesystem permissions to protect the file. |
| |
| [[gkthb]][[GSSCG00046]][[using-the-master-password-when-creating-a-domain]] |
| |
| ====== Using the Master Password When Creating a Domain |
| |
| The `create-domain` `--usemasterpassword` option specifies whether the |
| keystore is encrypted with a master password that is built into the |
| system, or by a user-defined master password. |
| |
| * If false (default), the keystore is encrypted with a well-known |
| password (changeit) that is built into {productName}. |
| * If true, the subcommand obtains the master password from the |
| `AS_ADMIN_MASTERPASSWORD` entry in the password file you specified in |
| the `--passwordfile` option of the `asadmin` utility. Or, if none is |
| defined, `--usemasterpassword` prompts the user for the master password. |
| |
| [[ghgof]][[GSSCG00047]][[administration-password]] |
| |
| ====== Administration Password |
| |
| An administration password, also known as the admin password, is used to |
| invoke the Administration Console and the `asadmin` utility. As with the |
| default admin username, the default admin password is usually set during |
| installation but it can be changed. For instructions, see link:#ghgpu[To |
| Change an Administration Password]. |
| |
| [[ablnq]][[GSSCG00048]][[encoded-passwords]] |
| |
| ====== Encoded Passwords |
| |
| Files that contain encoded passwords need to be protected using file |
| system permissions. These files include the following: |
| |
| * domain-dir``/master-password`` |
| + |
| This file contains the encoded master password and should be protected |
| with file system permissions 600. |
| * Any password file created to pass as an argument by using the |
| `--passwordfile` argument to the `asadmin` utility should be protected |
| with file system permissions. Additionally, any password file being used |
| for a transient purpose, such as setting up SSH among nodes, should be |
| deleted after it has served its purpose. |
| |
| For instructions, see link:#ghytn[To Set a Password From a File]. |
| |
| [[gkaol]][[GSSCG00049]][[web-browsers-and-password-storage]] |
| |
| ====== Web Browsers and Password Storage |
| |
| Most web browsers can save login credentials entered through HTML forms. |
| This function can be configured by the user and also by applications |
| that employ user credentials. If the function is enabled, then |
| credentials entered by the user are stored on their local computer and |
| retrieved by the browser on future visits to the same application. This |
| function is convenient for users, but can also be a security risk. The |
| stored credentials can be captured by an attacker who gains access to |
| the computer, either locally or through some remote compromise. Further, |
| methods have existed whereby a malicious web site can retrieve the |
| stored credentials for other applications, by exploiting browser |
| vulnerabilities or through application-level cross-domain attacks. |
| |
| To prevent your web browser from saving login credentials for the |
| {productName} Administration Console, choose "No" or "Never for this |
| page" when prompted by the browser during login. |
| |
| [[ghgoj]][[GSSCG00187]][[password-aliases]] |
| |
| ===== Password Aliases |
| |
| To avoid storing passwords in the domain configuration file in clear |
| text, you can create an alias for a password. This process is also known |
| as encrypting a password. For more information, see |
| link:#ghgqc[Administering Password Aliases]. |
| |
| [[ghlus]][[GSSCG00188]][[single-sign-on]] |
| |
| ===== Single Sign-on |
| |
| With single sign-on, a user who logs in to one application becomes |
| implicitly logged in to other applications that require the same |
| authentication information. Single sign-on is based on groups. Single |
| sign-on applies to web applications configured for the same realm and |
| virtual server. The realm is defined by the `realm-name` element in the |
| `web.xml` file. |
| |
| On {productName}, single sign-on behavior can be inherited from the |
| HTTP Service, enabled, or disabled. By default, it is inherited from the |
| HTTP Service. If enabled, single sign-on is enabled for web applications |
| on this virtual server that are configured for the same realm. If |
| disabled, single sign-on is disabled for this virtual server, and users |
| must authenticate separately to every application on the virtual server. |
| |
| [[ghlvu]][[GSSCG00204]][[authorization]] |
| |
| ==== Authorization |
| |
| Authorization, also known as access control, is the means by which users |
| are granted permission to access data or perform operations. After a |
| user is authenticated, the user's level of authorization determines what |
| operations the owner can perform. A user's authorization is based on the |
| user's role. |
| |
| [[abloh]][[GSSCG00189]][[roles]] |
| |
| Roles |
| +++++ |
| |
| A role defines which applications and what parts of each application |
| users can access and what those users or groups can do with the |
| applications. For example, in a personnel application, all employees |
| might be able to see phone numbers and email addresses, but only |
| managers have access to salary information. This application would |
| define at least two roles: `employee` and `manager`. Only users in the |
| `manager` role are allowed to view salary information. |
| |
| A role is different from a group in that a role defines a function in an |
| application, while a group is a set of users who are related in some |
| way. For example, the personnel application specify groups such as |
| `full-time`, `part-time`, and `on-leave`. Users in these groups are all |
| employees (the `employee` role). In addition, each user has its own |
| designation that defines an additional level of employment. |
| |
| Roles are defined in the deployment descriptor for the application. The |
| application developer or deployer maps roles to one or more groups in |
| the deployment descriptor for each application. When the application is |
| being packaged and deployed, the application specifies mappings between |
| users, groups, and roles, as illustrated in link:#fxjfw[Figure 1-1]. |
| |
| [NOTE] |
| ==== |
| By default, group principal names are mapped to roles of the same name. |
| Therefore, the Default Principal To Role Mapping setting is enabled by |
| default on the Security page of the {productName} Administration |
| Console. With this setting enabled, if the group name defined on |
| {productName} matches the role name defined in the application, there |
| is no need to use the runtime deployment descriptor to provide a |
| mapping. The application server will implicitly make this mapping, as |
| long as the names of the groups and roles match. |
| ==== |
| |
| [[GSSCG00001]][[fxjfw]] |
| |
| .*Figure 1-1 Role Mapping* |
| image:img/securityrolemapping.png[ |
| "Figure shows how users are assigned to groups, how users and groups are |
| assigned to roles, and how applications use groups and roles."] |
| |
| |
| [[ghsqd]][[GSSCG00190]][[java-authorization-contract-for-containers]] |
| |
| ===== Java Authorization Contract for Containers |
| |
| Java Authorization Contract for Containers (JACC) is the part of the |
| Jakarta EE specification that defines an interface for pluggable |
| authorization providers. This enables you to set up third-party plug-in |
| modules to perform authorization. By default, the {productName} |
| provides a simple, file-based authorization engine that complies with |
| the JACC specification. |
| |
| This release includes Administration Console support and CLI subcommands |
| to create (`create-jacc-provider`), delete (`delete-jacc-provider`), and |
| list (`list-jacc-providers`) JACC providers. link:#gkngj[Administering |
| JACC Providers] for additional information. |
| |
| You can also specify additional third-party JACC providers. |
| |
| [[gkriq]][[GSSCG00191]][[working-with-the-server.policy-policy-file]] |
| |
| ===== Working With the server.policy Policy File |
| |
| Each {productName} domain has its own global Java SE policy file, |
| located in domain-dir``/config``. The file is named `server.policy`. |
| |
| This section covers the following topics: |
| |
| * link:#gkrkh[Contents of server.policy] |
| * link:#gkrmo[Changing the Default Permissions] |
| |
| [[gkrkh]][[GSSCG00050]][[contents-of-server.policy]] |
| |
| Contents of server.policy |
| |
| A sample server.policy file is as follows. Comments in the file describe |
| why various permissions are granted. These permissions are described in |
| more detail in the next section. |
| |
| [NOTE] |
| ==== |
| This server.policy file is presented for example purposes only and is |
| subject to change. |
| ==== |
| |
| [source] |
| ---- |
| // classes in lib get all permissions by default |
| grant codeBase "file:${com.sun.aas.installRoot}/lib/-" { |
| permission java.security.AllPermission; |
| }; |
| |
| // Core server classes get all permissions by default |
| grant codeBase "file:${com.sun.aas.installRoot}/modules/-" { |
| permission java.security.AllPermission; |
| }; |
| |
| // Felix classes get all permissions by default |
| grant codeBase "file:${com.sun.aas.installRoot}/osgi/felix/bin/-" { |
| permission java.security.AllPermission; |
| }; |
| |
| // iMQ classes get all permissions by default |
| grant codeBase "file:${com.sun.aas.imqLib}/-" { |
| permission java.security.AllPermission; |
| }; |
| |
| // Derby driver classes get all permissions by default |
| grant codeBase "file:${com.sun.aas.derbyRoot}/lib/-" { |
| permission java.security.AllPermission; |
| }; |
| |
| |
| // permission for JDK's tools.jar to enable webservice annotation processing |
| // at runtime by wsgen tool: |
| // permission java.lang.RuntimePermission "createClassLoader"; |
| // |
| // permission for JDK's tools.jar to sign JARs at runtime for |
| // Java Web Start support: |
| // permissions java.security.AllPermission; |
| // on the advice of the JDK tools folks. Should be refined later. |
| grant codeBase "file:${com.sun.aas.javaRoot}/lib/tools.jar" { |
| permission java.security.AllPermission; |
| }; |
| |
| //Loading MBeans from anywhere, to take care of side effects of 6235678. |
| grant { |
| permission javax.management.MBeanTrustPermission "register" ; |
| }; |
| //Loading MBeans from anywhere, to take care of side effects of 6235678. |
| |
| |
| // Basic set of required permissions granted to all remaining code |
| // The permission FilePermission "<<ALL FILES>>", "read,write" |
| // allows all applications to read and write any file in the filesystem. |
| // It should be changed based on real deployment needs. If you know your |
| // applications just need to read/write a few directories consider removing |
| // this permission and adding grants indicating those specific directories. |
| // against the codebase of your application(s). |
| grant { |
| //Workaround for bugs #6484935, 6513799 |
| permission java.lang.RuntimePermission "getProtectionDomain"; |
| permission com.sun.corba.ee.impl.presentation.rmi.DynamicAccessPermission "access"; |
| permission java.util.PropertyPermission "*", "read,write"; |
| |
| permission java.lang.RuntimePermission "loadLibrary.*"; |
| permission java.lang.RuntimePermission "queuePrintJob"; |
| permission java.net.SocketPermission "*", "connect"; |
| permission java.io.FilePermission "<<ALL FILES>>", "read,write"; |
| |
| // work-around for pointbase bug 4864405 |
| permission java.io.FilePermission |
| "${com.sun.aas.instanceRoot}${/}lib${/}databases${/}-", |
| "delete"; |
| permission java.io.FilePermission "${java.io.tmpdir}${/}-", "delete"; |
| |
| permission java.util.PropertyPermission "*", "read"; |
| |
| permission java.lang.RuntimePermission "modifyThreadGroup"; |
| permission java.lang.RuntimePermission "getClassLoader"; |
| permission java.lang.RuntimePermission "setContextClassLoader"; |
| permission javax.management.MBeanPermission |
| "[com.sun.messaging.jms.*:*]", "*"; |
| }; |
| |
| |
| // Following grant block is only required by Connectors. If Connectors |
| // are not in use the recommendation is to remove this grant. |
| grant { |
| permission javax.security.auth.PrivateCredentialPermission |
| "javax.resource.spi.security.PasswordCredential * \"*\"","read"; |
| }; |
| |
| // Following grant block is only required for Reflection. If Reflection |
| // is not in use the recommendation is to remove this section. |
| grant { |
| permission java.lang.RuntimePermission "accessDeclaredMembers"; |
| }; |
| |
| // Permissions to invoke CORBA objects in server |
| grant { |
| permission com.sun.enterprise.security.CORBAObjectPermission "*", "*"; |
| }; |
| ---- |
| |
| [[gkrmo]][[GSSCG00051]][[changing-the-default-permissions]] |
| |
| ====== Changing the Default Permissions |
| |
| The {productName} internal server code is granted all permissions. |
| These grants are covered by the `AllPermission` grant blocks to various |
| parts of the server infrastructure code. Do not modify these entries. |
| |
| Application permissions are granted in the default grant block. These |
| permissions apply to all code not part of the internal server code |
| listed previously. |
| |
| The last section, beginning with the comment "Basic set of required |
| permissions..." provides the basic set of permissions granted to all |
| remaining code. |
| |
| Depending on your {productName} implementation, deleting or modifying |
| these permissions might be appropriate. |
| |
| Specifically, the following permission allows all applications to read |
| and write all properties and read and write all files on the filesystem. |
| |
| [source] |
| ---- |
| permission java.util.PropertyPermission "*", "read,write"; |
| permission java.io.FilePermission "<<ALL FILES\>>", "read,write"; |
| ---- |
| |
| While this grant provides optimum flexibility, it is inherently |
| unsecure. For enhanced security, change this permission based on your |
| real deployment needs. |
| |
| For example, consider removing this permission and assign default read |
| and write permissions only to the application's install directory |
| (context-root). (This example uses `com.sun.aas.instanceRoot`, which |
| specifies the top level directory for a server instance.) |
| |
| [source] |
| ---- |
| grant codeBase "file:${com.sun.aas.instanceRoot}/applications/MyApp/-" |
| { |
| permission java.io.FilePermission "file:${com.sun.aas.instanceRoot} |
| /applications/MyApp/-", "read,write"; |
| } |
| ---- |
| |
| For any application that needs to read and write additional directories, |
| you would then have to explicitly allow such permissions by adding |
| specific grants. In general, you should add extra permissions only to |
| the applications or modules that require them, not to all applications |
| deployed to a domain. |
| |
| Additional permissions (see the embedded comments in `server.policy`) |
| are granted specifically for using connectors and reflection. If |
| connectors or reflection are not used in a particular domain, you should |
| remove these permissions, because they are otherwise unnecessary. |
| |
| [[ghlql]][[GSSCG00205]][[auditing]] |
| |
| ==== Auditing |
| |
| Auditing is the means used to capture security-related events for the |
| purpose of evaluating the effectiveness of security measures. {productName} uses audit modules to capture audit trails of all authentication |
| and authorization decisions. {productName} provides a default audit |
| module, as well as the ability to plug in custom audit modules. The |
| scope of the audit module is the entire server, which means that all the |
| applications on the server will use the same audit module. |
| |
| For administration instructions, see link:#ghgol[Administering Audit |
| Modules]. |
| |
| [[ghlti]][[GSSCG00206]][[firewalls]] |
| |
| ==== Firewalls |
| |
| A firewall controls the flow of data between two or more networks, and |
| manages the links between the networks. A firewall can consist of both |
| hardware and software elements. The following guidelines pertain |
| primarily to {productName}: |
| |
| * In general, firewalls should be configured so that clients can access |
| the necessary TCP/IP ports. |
| + |
| For example, if the HTTP listener is operating on port 8080, configure |
| the firewall to allow HTTP requests on port 8080 only. Likewise, if |
| HTTPS requests are set up for port 8081, you must configure the |
| firewalls to allow HTTPS requests on port 8081. |
| * If direct Remote Method Invocations over Internet Inter-ORB Protocol |
| (RMI-IIOP) access from the Internet to EJB modules is required, open the |
| RMI-IIOP listener port as well. |
| + |
| |
| [NOTE] |
| ==== |
| Opening the RMI-IIOP listener port is strongly discouraged because it |
| creates security risks. |
| ==== |
| |
| * In double firewall architecture, you must configure the outer firewall |
| to allow for HTTP and HTTPS transactions. You must configure the inner |
| firewall to allow the HTTP server plug-in to communicate with {productName} behind the firewall. |
| |
| [[abloj]][[GSSCG00207]][[certificates-and-ssl]] |
| |
| ==== Certificates and SSL |
| |
| The following topics are addressed here: |
| |
| * link:#ablok[Certificates] |
| * link:#ablol[Certificate Chains] |
| * link:#ablqx[Certificate Files] |
| * link:#ablom[Secure Sockets Layer] |
| * link:#gksdc[Custom Authentication of Client Certificate in SSL Mutual Authentication] |
| |
| For administration instructions, see link:#ablqz[Administering JSSE Certificates]. |
| |
| [[ablok]][[GSSCG00192]][[certificates]] |
| |
| ===== Certificates |
| |
| Certificates, also called digital certificates, are electronic files |
| that uniquely identify people and resources on the Internet. |
| Certificates also enable secure, confidential communication between two |
| entities. There are different kinds of certificates: |
| |
| * Personal certificates are used by individuals. |
| * Server certificates are used to establish secure sessions between the |
| server and clients through secure sockets layer (SSL) technology. |
| |
| Certificates are based on public key cryptography, which uses pairs of |
| digital keys (very long numbers) to encrypt, or encode, information so |
| the information can be read only by its intended recipient. The |
| recipient then decrypts (decodes) the information to read it. A key pair |
| contains a public key and a private key. The owner distributes the |
| public key and makes it available to anyone. But the owner never |
| distributes the private key, which is always kept secret. Because the |
| keys are mathematically related, data encrypted with one key can only be |
| decrypted with the other key in the pair. |
| |
| Certificates are issued by a trusted third party called a Certification |
| Authority (CA). The CA is analogous to a passport office: it validates |
| the certificate holder's identity and signs the certificate so that it |
| cannot be forged or tampered with. After a CA has signed a certificate, |
| the holder can present it as proof of identity and to establish |
| encrypted, confidential communications. Most importantly, a certificate |
| binds the owner's public key to the owner's identity. |
| |
| In addition to the public key, a certificate typically includes |
| information such as the following: |
| |
| * The name of the holder and other identification, such as the URL of |
| the web server using the certificate, or an individual's email address |
| * The name of the CA that issued the certificate |
| * An expiration date |
| |
| Certificates are governed by the technical specifications of the X.509 |
| format. To verify the identity of a user in the `certificate` realm, the |
| authentication service verifies an X.509 certificate, using the common |
| name field of the X.509 certificate as the principal name. |
| |
| [[ablol]][[GSSCG00193]][[certificate-chains]] |
| |
| ===== Certificate Chains |
| |
| A certificate chain is a series of certificates issued by successive CA |
| certificates, eventually ending in a root CA certificate. |
| |
| Web browsers are preconfigured with a set of root CA certificates that |
| the browser automatically trusts. Any certificates from elsewhere must |
| come with a certificate chain to verify their validity. |
| |
| When a certificate is first generated, it is a self-signed certificate. |
| A self-signed certificate is one for which the issuer (signer) is the |
| same as the subject (the entity whose public key is being authenticated |
| by the certificate). When the owner sends a certificate signing request |
| (CSR) to a CA, then imports the response, the self-signed certificate is |
| replaced by a chain of certificates. At the bottom of the chain is the |
| certificate (reply) issued by the CA authenticating the subject's public |
| key. The next certificate in the chain is one that authenticates the |
| CA's public key. Usually, this is a self-signed certificate (that is, a |
| certificate from the CA authenticating its own public key) and the last |
| certificate in the chain. |
| |
| In other cases, the CA can return a chain of certificates. In this |
| situation, the bottom certificate in the chain is the same (a |
| certificate signed by the CA, authenticating the public key of the key |
| entry), but the second certificate in the chain is a certificate signed |
| by a different CA, authenticating the public key of the CA to which you |
| sent the CSR. Then, the next certificate in the chain is a certificate |
| authenticating the second CA's key, and so on, until a self-signed root |
| certificate is reached. Each certificate in the chain (after the first) |
| thus authenticates the public key of the signer of the previous |
| certificate in the chain. |
| |
| [[ablqx]][[GSSCG00194]][[certificate-files]] |
| |
| ===== Certificate Files |
| |
| During {productName} installation, a certificate is generated in Java |
| Secure Socket Extension (JSSE) format suitable for internal testing. |
| (The certificate is self-signed.) By default, {productName} stores |
| its certificate information in certificate databases in the |
| domain-dir``/config`` directory: |
| |
| Keystore file:: |
| The `keystore.jks` file contains {productName} certificate, |
| including its private key. The keystore file is protected with a |
| password. + |
| Each keystore entry has a unique alias. After installation, the |
| {productName} keystore has a single entry with an alias of `s1as`. |
| Truststore file:: |
| The `cacerts.jks` file contains the {productName} trusted |
| certificates, including public keys for other entities. For a trusted |
| certificate, the server has confirmed that the public key in the |
| certificate belongs to the certificate's owner. Trusted certificates |
| generally include those of CAs. |
| |
| By default, {productName} is configured with a keystore and |
| truststore that will work with the example applications and for |
| development purposes. |
| |
| [[ablom]][[GSSCG00195]][[secure-sockets-layer]] |
| |
| ===== Secure Sockets Layer |
| |
| Secure Sockets Layer (SSL) is the most popular standard for securing |
| Internet communications and transactions. Secure web applications use |
| HTTPS (HTTP over SSL). The HTTPS protocol uses certificates to ensure |
| confidential and secure communications between server and clients. In an |
| SSL connection, both the client and the server encrypt data before |
| sending it. Data is decrypted upon receipt. |
| |
| When a Web browser (client) wants to connect to a secure site, an SSL |
| handshake happens, like this: |
| |
| 1. The browser sends a message over the network requesting a secure |
| session (typically, by requesting a URL that begins with `https` instead |
| of `http`). |
| 2. The server responds by sending its certificate (including its public key). |
| 3. The browser verifies that the server's certificate is valid and is |
| signed by a CA whose certificate is in the browser's database (and who |
| is trusted). It also verifies that the CA certificate has not expired. |
| 4. If the certificate is valid, the browser generates a one time, |
| unique session key and encrypts it with the server's public key. The |
| browser then sends the encrypted session key to the server so that they |
| both have a copy. |
| 5. The server decrypts the message using its private key and recovers |
| the session key. |
| |
| After the handshake, the client has verified the identity of the Web |
| site, and only the client and the Web server have a copy of the session |
| key. From this point forward, the client and the server use the session |
| key to encrypt all their communications with each other. Thus, their |
| communications are ensured to be secure. |
| |
| The newest version of the SSL standard is called Transport Layer |
| Security (TLS). The {productName} supports the SSL 3.0 and the TLS |
| 1.0 encryption protocols. |
| |
| To use SSL, {productName} must have a certificate for each external |
| interface or IP address that accepts secure connections. The HTTPS |
| service of most web servers will not run unless a certificate has been |
| installed. For instructions on applying SSL to HTTP listeners, see |
| "link:administration-guide/http_https.html#GSADG00469[ |
| To Configure an HTTP Listener for SSL]" in {productName} Administration Guide. |
| |
| [[ablon]][[GSSCG00052]][[ciphers]] |
| |
| ====== Ciphers |
| |
| A cipher is a cryptographic algorithm used for encryption or decryption. |
| SSL and TLS protocols support a variety of ciphers used to authenticate |
| the server and client to each other, transmit certificates, and |
| establish session keys. |
| |
| Some ciphers are stronger and more secure than others. Clients and |
| servers can support different cipher suites. During a secure connection, |
| the client and the server agree to use the strongest cipher that they |
| both have enabled for communication, so it is usually sufficient to |
| enable all ciphers. |
| |
| [[abloo]][[GSSCG00053]][[name-based-virtual-hosts]] |
| |
| ====== Name-based Virtual Hosts |
| |
| Using name-based virtual hosts for a secure application can be |
| problematic. This is a design limitation of the SSL protocol itself. The |
| SSL handshake, where the client browser accepts the server certificate, |
| must occur before the HTTP request is accessed. As a result, the request |
| information containing the virtual host name cannot be determined prior |
| to authentication, and it is therefore not possible to assign multiple |
| certificates to a single IP address. |
| |
| If all virtual hosts on a single IP address need to authenticate against |
| the same certificate, the addition of multiple virtual hosts probably |
| will not interfere with normal SSL operations on the server. Be aware, |
| however, that most browsers will compare the server's domain name |
| against the domain name listed in the certificate, if any (applicable |
| primarily to official, CA-signed certificates). If the domain names do |
| not match, these browsers display a warning. In general, only |
| address-based virtual hosts are commonly used with SSL in a production |
| environment. |
| |
| [[gksdc]][[GSSCG00196]][[custom-authentication-of-client-certificate-in-ssl-mutual-authentication]] |
| |
| ===== Custom Authentication of Client Certificate in SSL Mutual Authentication |
| |
| Release 7 of {productName} extends the Certificate realm to allow |
| custom authentication and group assignment based on the client |
| certificate received as part of SSL mutual (two-way) authentication. |
| |
| As in previous releases, you can create only one certificate realm. |
| However, you can now use a convenient abstract base class to configure a |
| JAAS LoginModule for the Certificate realm. Specifically, your |
| LoginModule can now extend |
| `com.sun.appserv.security.AppservCertificateLoginModule`. When you do |
| this, you need to implement only the `authenticateUser` method and call |
| the `commitUserAuthentication` method to signify success. |
| |
| This section describes the following topics: |
| |
| * link:#gksfl[Understanding the `AppservCertificateLoginModule` Class] |
| * link:#gksej[Example AppservCertificateLoginModule Code] |
| * link:#gksee[Setting the JAAS Context] |
| |
| [[gksfl]][[GSSCG00054]][[understanding-the-appservcertificateloginmodule-class]] |
| |
| Understanding the `AppservCertificateLoginModule` Class |
| |
| The `AppservCertificateLoginModule` class provides some convenience |
| methods for accessing the certificates, the application name and so |
| forth, and for adding the group principals to the subject. The |
| convenience methods include the following: |
| |
| `getAppName()`:: |
| Returns the name of the application to be authenticated. This may be |
| useful when a single LoginModule has to handle multiple applications |
| that use certificates. |
| `getCerts()`:: |
| Returns the certificate chain as an array of |
| `java.security.cert.X509Certificate` certificates. |
| `getX500Principal()`:: |
| Returns the Distinguished principal from the first certificate in the |
| chain. |
| `getSubject()`:: |
| Returns the subject that is being authenticated. |
| `commitUserAuthentication(final String[] groups)`:: |
| This method sets the authentication status to success if the groups |
| parameter is non-null. Note that this method is called after the |
| authentication has succeeded. If authentication failed, do not call |
| this method. |
| |
| [NOTE] |
| ==== |
| You do not have to extend the convenience base class, you can extend the |
| JAAS LoginModule `javax.security.auth.spi.LoginModule` instead if you so |
| choose. |
| ==== |
| |
| [[gksej]][[GSSCG00055]][[example-appservcertificateloginmodule-code]] |
| |
| Example AppservCertificateLoginModule Code |
| |
| link:#gksel[Example 1-1] shows a sample instance of the |
| AppservCertificateLoginModule class. |
| |
| Take note of the following points from the example: |
| |
| * The `getX500Principal()` method returns the subject (subject |
| distinguished name) value from the first certificate in the client |
| certificate chain as an `X500Principal`. |
| * From that `X500Principal`, the `getName()` method then returns a |
| string representation of the X.500 distinguished name using the format |
| defined in RFC 2253. |
| * The example uses the `getAppName()` method to determine the |
| application name. It also determines the organizational unit (`OU`) from |
| the distinguished name. |
| * The example concatenates the application name with the value of `OU`, |
| and uses it as the group name in the `commitUserAuthentication` method. |
| |
| [[GSSCG00060]][[gksel]] |
| Example 1-1 Sample AppservCertificateLoginModule Code |
| |
| [source,java] |
| ---- |
| public class CertificateLM extends AppservCertificateLoginModule { |
| |
| @Override |
| protected void authenticateUser() throws LoginException { |
| // Get the distinguished name from the X500Principal. |
| String dname = getX500Principal().getName(); |
| StringTokenizer st = new StringTokenizer(dname, "B \t\n\r\f,"); |
| while (st.hasMoreTokens()) { |
| String next = st.nextToken(); |
| // Set the appname:OU as the group. |
| // At this point, one has the application name and the DN of |
| // the certificate. A suitable login decision can be made here. |
| if (next.startsWith("OU=")) { |
| commitUserAuthentication(new String[]{getAppName() + ":" + next.substring(3)}); |
| return; |
| } |
| } |
| throw new LoginException("No OU found."); |
| } |
| } |
| ---- |
| |
| [[gksee]][[GSSCG00056]][[setting-the-jaas-context]] |
| |
| ====== Setting the JAAS Context |
| |
| After you create your LoginModule, you must plug it in to a |
| jaas-context, which you then specify as a parameter to the certificate |
| realm in {productName}. |
| |
| To do this, perform the following steps: |
| |
| 1. Specify a new jaas-context for the Certificate realm in the file |
| domain-dir``/config/login.conf``. For example, using the `CertificateLM` |
| class from link:#gksej[Example AppservCertificateLoginModule Code]: |
| + |
| [source] |
| ---- |
| certRealm { |
| com.sun.blogs.certificate.login.CertificateLM required; |
| }; |
| ---- |
| 2. Specify this jaas-context as a parameter to the `set` subcommand in the |
| `configs.config.server-config.security-service.auth-realm.certificate.property.jaas-context=`<jaas-context-name> |
| property. For example: |
| + |
| `asadmin>` |
| `set configs.config.server-config.security-service.auth-realm.certificate.property.jaas-context=certRealm` |
| + |
| `configs.config.server-config.security-service.auth-realm.certificate.property.jaas-context=certRealm` |
| + |
| `Command set executed successfully.` |
| 3. Optionally, get the value you just set to make sure that it is correct. |
| + |
| `asadmin>` |
| `get configs.config.server-config.security-service.auth-realm.certificate.property.jaas-context` |
| + |
| `configs.config.server-config.security-service.auth-realm.certificate.property.jaas-context=certRealm` |
| + |
| `Command get executed successfully.` |
| |
| [[ablno]][[GSSCG00208]][[tools-for-managing-system-security]] |
| |
| ==== Tools for Managing System Security |
| |
| {productName} provides the following tools for managing system |
| security: |
| |
| Administration Console:: |
| The Administration Console is a browser-based utility used to |
| configure security for the entire server. Tasks include managing |
| certificates, users, groups, and realms, and performing other |
| system-wide security tasks. For a general introduction to the |
| Administration Console, see |
| "link:administration-guide/overview.html#GSADG00698[Administration Console]" |
| in {productName} Administration Guide. |
| The `asadmin` utility:: |
| The `asadmin` command-line utility performs many of the same tasks as |
| the Administration Console. You might be able to do some things with |
| the `asadmin` utility that you cannot do with the Administration |
| Console. For a general introduction to `asadmin`, see |
| "link:administration-guide/overview.html#GSADG00699[asadmin Utility]" |
| in {productName} Administration Guide. |
| The `keytool` utility:: |
| The `keytool` Java Platform, Standard Edition (Java SE) command-line |
| utility is used for managing digital certificates and key pairs. For |
| more information, see link:#ablqz[Administering JSSE Certificates]. |
| The `policytool` utility:: |
| The `policytool` Java SE graphical utility is used for managing |
| system-wide Java security policies. As an administrator, you rarely |
| use `policytool`. |
| |
| [[ghgrp]][[GSSCG00144]][[administering-passwords]] |
| |
| === Administering Passwords |
| |
| There are multiple ways to administer passwords. You can rely on |
| administrators to keep passwords secret and change the passwords |
| regularly. You can set up files for storing passwords so that `asadmin` |
| subcommands can access these files rather than having users type the |
| commands. You can encrypt passwords by setting up aliases so that |
| sensitive passwords are not visible in the `domain.xml` file. |
| |
| The following topics are addressed here: |
| |
| * link:#giudi[To Change the Master Password] |
| * link:#gktgr[Additional Considerations for the `start-instance` and |
| `start-cluster` Subcommands] |
| * link:#gktey[Using `start-instance` and `start-cluster` With a Password File] |
| * link:#ghgpu[To Change an Administration Password] |
| * link:#ghytn[To Set a Password From a File] |
| * link:#ghgqc[Administering Password Aliases] |
| |
| [[giudi]][[GSSCG00093]][[to-change-the-master-password]] |
| |
| ==== To Change the Master Password |
| |
| The master password gives access to the keystore used with the domain. |
| This password is not tied to a UNIX user. You should treat this overall |
| shared password as sensitive data. {productName} never uses it for |
| authentication and never transmits it over the network. |
| |
| You can choose to type the password manually when required, or to |
| obscure the password in a password file. If there is no password file, |
| you are prompted for the master password. If there is a password file, |
| but you want to change access to require prompting, remove the file. The |
| default master password is `changeit`. |
| |
| When changing the master password, it has to be changed on all nodes as |
| well as on the DAS. The master password on nodes is only stored once in |
| the node, for all instances that are on that node. |
| |
| Use the `change-master-password` subcommand in local mode to modify the |
| master password. |
| |
| [NOTE] |
| ==== |
| If you change the master password and are not using a master password |
| file, the `start-instance` and `start-cluster` subcommands are not able |
| to determine the master password. In this case, you must start those |
| instances locally by using start-local-instance. |
| ==== |
| |
| When the master password is saved, it is saved in the `master-password` file. |
| |
| [[sthref6]] |
| |
| Before You Begin |
| |
| This subcommand will not work unless the domain is stopped. |
| |
| 1. Stop the domain whose password you are changing. |
| + |
| See "link:administration-guide/domains.html#GSADG00336[To Stop a Domain]" |
| in {productName} Administration Guide. |
| 2. Change the master password for the domain by using the |
| link:reference-manual/change-master-password.html#GSRFM00006[`change-master-password`] subcommand. |
| + |
| You are prompted for the old and new passwords. All dependent items are re-encrypted. |
| 3. Start the domain. |
| + |
| See "link:administration-guide/domains.html#GSADG00335[To Start a Domain]" in {productName} Administration Guide. |
| |
| [[GSSCG00061]][[givil]] |
| Example 1-2 Changing the Master Password |
| |
| The `change-master-password` subcommand is interactive in that you are |
| prompted for the old master password as well as the new master password. |
| This example changes the master password for `domain44ps`: |
| |
| [source] |
| ---- |
| asadmin> change-master-password domain44ps |
| ---- |
| |
| If you have already logged into the domain using the |
| link:reference-manual/login.html#GSRFM00210[`login`] subcommand, you are prompted for the new |
| master password: |
| |
| [source] |
| ---- |
| Please enter the new master password> |
| Please enter the new master password again> |
| ---- |
| |
| If you are not logged into the domain, you are prompted for both the old |
| and the new master passwords: |
| |
| [source] |
| ---- |
| Please enter the master password> |
| Please enter the new master password> |
| Please enter the new master password again> |
| ---- |
| |
| Information similar to the following is displayed: |
| |
| [source] |
| ---- |
| Master password changed for domain44ps |
| ---- |
| |
| [[sthref7]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin --help change-master-password` at the command line. |
| |
| [[gktgr]][[GSSCG00209]][[additional-considerations-for-the-start-instance-and-start-cluster-subcommands]] |
| |
| ==== Additional Considerations for the `start-instance` and `start-cluster` Subcommands |
| |
| If you change the master password for DAS, the `start-domain` and |
| `start-local-instance` subcommands allow you to provide it during domain |
| or instance startup in one of three ways: |
| |
| * Via the master-password file |
| * By entering it interactively |
| * Via the `asadmin` `passwordfile` |
| |
| The `start-instance` and `start-cluster` subcommands are more |
| problematic. If you create a domain with a master password other than |
| the default, an associated remote instance or cluster must have access |
| to the master password in order to start. However, for security reasons |
| {productName} never transmits the master password or the master |
| password file over the network. |
| |
| Consider the following scenario: |
| |
| 1. Change the master password on the DAS and save it with `--savemasterpassword`. |
| 2. Create an instance on another host using the subcommand |
| `create-instance`. {productName} copies the keystore and truststore |
| from the DAS to the instance, but it does not copy the master password file. |
| 3. Try to start the instance using the `start-instance` subcommand. |
| An error results. |
| |
| The `start-instance` command is looking for the file master-password in |
| the node directory on the instance machine, and it is not there by |
| default. Therefore, the subcommand fails. |
| |
| You can use the `change-master-password` subcommand to make sure the |
| correct password is used in this password file, as described in |
| link:#gktey[Using `start-instance` and `start-cluster` With a Password File]. |
| |
| [NOTE] |
| ==== |
| The `start-instance` and `start-cluster` subcommands do not include any |
| other way for you to provide the password. If you change the master |
| password and are not using a master password file, the `start-instance` |
| and `start-cluster` subcommands are not able to determine the master |
| password. In this case, you must start the instances locally by using |
| `start-local-instance`. |
| ==== |
| |
| [[gktey]][[GSSCG00094]][[using-start-instance-and-start-cluster-with-a-password-file]] |
| |
| ==== Using `start-instance` and `start-cluster` With a Password File |
| |
| Assume that you have changed the master password on the DAS and you want |
| to make the same change for all instances. |
| |
| The `start-instance` and `start-cluster` subcommands automatically use |
| the master password file if it exists in the instance filesystem. You |
| can use the `change-master-password` subcommand to make sure the |
| password file exists and that the correct password is used. |
| |
| 1. From the DAS, create a domain and set the master password. + |
| `asadmin> create-domain --savemasterpassword true domain-name` |
| 2. Start the domain. + |
| `asadmin> start-domain domain-name` |
| 3. Create a node that is enabled for communication over secure shell (SSH). + |
| `asadmin> create-node-ssh --nodehost host-name --installdir/some-dir node-name` |
| 4. Create an instance on the node. + |
| `asadmin> create-instance --node node-name instance-name` |
| 5. Before you start the instance, on the instance machine run |
| `change-master-password` with the `---savemasterpassword` option to |
| create a file called `master-password` in the agents directory to access |
| the keystores. (The `start-instance` subcommand is looking for a file |
| called `master-password` in the agents directory to access the stores.) + |
| `asadmin> change-master-password --savemasterpassword true --nodedir /some-dir node-name` + |
| You are prompted to enter the current and new master password: |
| + |
| [source] |
| ---- |
| Enter the current master password> |
| Enter the new master password> |
| Enter the new master password again> |
| Command change-master-password executed successfully. |
| ---- |
| + |
| Remember that when you created the domain you specified a new master |
| password. This master password was then used to encrypt the keystore and |
| truststore for the DAS, and these stores were copied to the instance as |
| a result of the `create-instance` subcommand. |
| + |
| Therefore, enter the master password you set when you created the domain |
| as both the current master password and again as the new master |
| password. You enter it as the new master password because you do not |
| want to change the master password for the instance and make it out of |
| sync with the DAS. |
| 6. Run start-instance from the DAS. |
| + |
| `asadmin>` `start-instance` instance-name |
| + |
| The master password file is associated with the node and not with an |
| instance. After the master password file exists in the node directory on |
| the instance machine, additional instances can be created, started and |
| stopped from the DAS. |
| |
| [[ghgpu]][[GSSCG00095]][[to-change-an-administration-password]] |
| |
| ==== To Change an Administration Password |
| |
| Use the `change-admin-password` subcommand in remote mode to change an |
| administration password. The default administration user is `admin`. You |
| are prompted for the old and new admin passwords, with confirmation. The |
| passwords are not echoed to the display. |
| |
| [NOTE] |
| ==== |
| For the zip bundle of {productName} 7, the default administrator |
| login is `admin`, with no password, which means that no login is |
| required. For {productName}, you are prompted to provide a |
| password for the `admin` user when you start the domain for the first |
| time. |
| ==== |
| |
| [NOTE] |
| ==== |
| If there is a single user called `admin` that does not have a password, |
| you are not prompted for login information. Any other situation requires |
| login. |
| ==== |
| |
| [NOTE] |
| ==== |
| If secure administration is enabled as described in |
| link:administrative-security.html#gkomz[Running Secure Admin], you cannot |
| change an administration password to a blank value. |
| ==== |
| |
| |
| Encrypting the admin password is strongly encouraged. |
| |
| 1. Change the admin password by using the |
| link:reference-manual/change-admin-password.html#GSRFM00004[`change-admin-password`] subcommand. |
| 2. Enter the old and new admin passwords when prompted. |
| 3. Restart {productName}. + |
| See "link:administration-guide/domains.html#GSADG00337[To Restart a Domain]" in {productName} Administration Guide. |
| |
| [[GSSCG00062]][[ghlac]] |
| Example 1-3 Changing the Admin Password |
| |
| This example changes the admin password for user anonymous from |
| `adminadmin` to `newadmin`: |
| |
| [source] |
| ---- |
| asadmin> change-admin-password --username anonymous |
| ---- |
| |
| You are prompted to enter the old and the new admin passwords: |
| |
| [source] |
| ---- |
| Enter admin password>adminadmin |
| Enter new admin password>newadmin |
| Enter new admin password again>newadmin |
| ---- |
| |
| Information similar to the following is displayed: |
| |
| [source] |
| ---- |
| Command change-admin-password executed successfully. |
| ---- |
| |
| [[sthref8]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help change-admin-password` at the command line. |
| |
| [[ghytn]][[GSSCG00096]][[to-set-a-password-from-a-file]] |
| |
| ==== To Set a Password From a File |
| |
| Instead of typing the password at the command line, you can access the |
| password for a command from a file such as `passwords.txt`. The |
| `--passwordfile` option of the `asadmin` utility takes the name of the |
| file that contains the passwords. The entry for a password in the file |
| must have the `AS_ADMIN_` prefix followed by the password name in |
| uppercase letters. |
| |
| [NOTE] |
| ==== |
| Any password file created to pass as an argument by using the |
| `--passwordfile` argument to the `asadmin` utility should be protected |
| with file system permissions. Additionally, any password file being used |
| for a transient purpose, such as setting up SSH among nodes, should be |
| deleted after it has served its purpose. |
| ==== |
| |
| For a list of the types of passwords that can be specified, see the |
| link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)] help page. |
| |
| [source] |
| ---- |
| AS_ADMIN_MASTERPASSWORD |
| AS_ADMIN_USERPASSWORD |
| AS_ADMIN_ALIASPASSWORD |
| ---- |
| |
| 1. Edit the password file. + |
| For example, to specify the password for the domain administration |
| server (DAS), add an entry similar to the following to the password |
| file, where `adminadmin` is the administrator password: |
| + |
| [source] |
| ---- |
| AS_ADMIN_PASSWORD=adminadmin |
| ---- |
| 2. Save the password file. + |
| You can now specify the password file in an `asadmin` subcommand. In |
| this example, `passwords.txt` is the file that contains the password: |
| + |
| [source] |
| ---- |
| asadmin>delete-jdbc-resource --user admin --passwordfile passwords.txt jdbc/DerbyPool |
| ---- |
| |
| [[sthref9]] |
| |
| ===== Troubleshooting |
| |
| If `AS_ADMIN_PASSWORD` has been exported to the global environment, |
| specifying the `--passwordfile` option will produce a warning about |
| using the `--passwordfile` option. To prevent this warning situation |
| from happening, unset `AS_ADMIN_PASSWORD`. |
| |
| [[ghgqc]][[GSSCG00210]][[administering-password-aliases]] |
| |
| ==== Administering Password Aliases |
| |
| A password alias is used to indirectly access a password so that the |
| password itself does not appear in cleartext in the domain's |
| `domain.xml` configuration file. |
| |
| Storing passwords in cleartext format in system configuration files is |
| common in many open source projects. In addition to {productName}, |
| Apache Tomcat, Maven, and Subversion, among others, store and pass |
| passwords in cleartext format. However, storing and passing passwords in |
| cleartext can be a security risk, and may violate some corporate |
| security policies. In such cases, you can use password aliases. |
| |
| The following topics are addressed here: |
| |
| * link:#ghgrf[To Create a Password Alias] |
| * link:#ghgsr[To List Password Aliases] |
| * link:#ghgnv[To Delete a Password Alias] |
| * link:#giobz[To Update a Password Alias] |
| |
| [[ghgrf]][[GSSCG00097]][[to-create-a-password-alias]] |
| |
| ===== To Create a Password Alias |
| |
| Use the `create-password-alias` subcommand in remote mode to create an |
| alias for a password in the domain's keystore. The password |
| corresponding to the alias name is stored in an encrypted form in the |
| domain configuration file. The `create-password-alias` subcommand takes |
| both a secure interactive form, in which users are prompted for all |
| information, and a more script-friendly form, in which the password is |
| propagated on the command line. |
| |
| You can also use the link:reference-manual/set.html#GSRFM00226[`set`] subcommand to remove and |
| replace the password in the configuration file. For example: |
| |
| [source] |
| ---- |
| asadmin set --user admin server.jms-service.jms-host.default_JMS_host. |
| admin-password='${ALIAS=jms-password}' |
| ---- |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. Go to the directory where the configuration file resides. + |
| By default, the configuration file is located in domain-dir``/config``. |
| 3. Create the password alias by using the |
| link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`] subcommand. |
| 4. Type the password for the alias when prompted. |
| 5. Add the alias to a password file. + |
| For example, assume the use of a password file such as `passwords.txt`. |
| Assume further that you want to add an alias for the |
| `AS_ADMIN_USERPASSWORD` entry that is read by the |
| link:reference-manual/create-file-user.html#GSRFM00024[`create-file-user`] subcommand. |
| You would add the following line to the password file: |
| `AS_ADMIN_USERPASSWORD=${ALIAS=user-password-alias}`, where |
| user-password-alias is the new password alias. |
| 6. To continue the example of the previous step, you would then run the |
| link:reference-manual/create-file-user.html#GSRFM00024[`create-file-user`] subcommand. + |
| You could use this method to create several users (user1, user2, and so forth), |
| all with the same password. + |
| `asadmin>` `--passwordfile``passwords.txt create-file-user` user1 |
| |
| [[GSSCG00063]][[ginvi]] |
| Example 1-4 Creating a Password Alias |
| |
| This example creates the new `jms-password` alias for the `admin` user: |
| |
| [source] |
| ---- |
| asadmin> create-password-alias --user admin jms-password |
| ---- |
| |
| You are prompted to type the password for the alias: |
| |
| [source] |
| ---- |
| Please enter the alias password>secret-password |
| Please enter the alias password again>secret-password |
| Command create-password-alias executed successfully. |
| ---- |
| |
| [[sthref10]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help create-password-alias` at the command line. |
| |
| [[ghgsr]][[GSSCG00098]][[to-list-password-aliases]] |
| |
| ===== To List Password Aliases |
| |
| Use the `list-password-aliases` subcommand in remote mode to list |
| existing the password aliases. |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. List password aliases by using the |
| link:reference-manual/list-password-aliases.html#GSRFM00190[`list-password-aliases`] subcommand. |
| |
| [[GSSCG00064]][[ginsk]] |
| Example 1-5 Listing Password Aliases |
| |
| This example lists the existing password aliases: |
| |
| [source] |
| ---- |
| asadmin> list-password aliases |
| jmspassword-alias |
| Command list-password-aliases executed successfully |
| ---- |
| |
| [[sthref11]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help list-password-aliases` at the command line. |
| |
| [[ghgnv]][[GSSCG00099]][[to-delete-a-password-alias]] |
| |
| ===== To Delete a Password Alias |
| |
| Use the `delete-password-alias` subcommand in remote mode to delete an |
| existing password alias. |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. List all aliases by using the |
| link:reference-manual/list-password-aliases.html#GSRFM00190[`list-password-aliases`] subcommand. |
| 3. Delete a password alias by using the |
| link:reference-manual/list-password-aliases.html#GSRFM00190[`list-password-aliases`] subcommand. |
| |
| [[GSSCG00065]][[ginul]] |
| Example 1-6 Deleting a Password Alias |
| |
| This example deletes the password alias `jmspassword-alias`: |
| |
| [source] |
| ---- |
| asadmin> delete-password-alias jmspassword-alias |
| Command list-password-aliases executed successfully |
| ---- |
| |
| [[sthref12]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help delete-password-alias` at the command line. |
| |
| [[giobz]][[GSSCG00100]][[to-update-a-password-alias]] |
| |
| ===== To Update a Password Alias |
| |
| Use the `update-password-alias` subcommand in remote mode to change the |
| password for an existing password alias. The `update-password-alias` |
| subcommand takes both a secure interactive form, in which the user is |
| prompted for all information, and a more script-friendly form, in which |
| the password is propagated on the command line. |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. Update an alias by using the |
| link:reference-manual/update-password-alias.html#GSRFM00257[`update-password-alias`] subcommand. |
| 3. Type the password when prompted. |
| |
| [[GSSCG00066]][[giodl]] |
| Example 1-7 Updating a Password Alias |
| |
| This example updates the password for the `jmspassword-alias` alias: |
| |
| [source] |
| ---- |
| asadmin> update-password-alias jsmpassword-alias |
| ---- |
| |
| You are prompted to type the new password for the alias: |
| |
| [source] |
| ---- |
| Please enter the alias password>new-secret-password |
| Please enter the alias password again>new-secret-password |
| Command update-password-alias executed successfully |
| ---- |
| |
| [[sthref13]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help update-password-alias` at the command line. |
| |
| [[ghgol]][[GSSCG00146]][[administering-audit-modules]] |
| |
| === Administering Audit Modules |
| |
| The following topics are addressed here: |
| |
| * link:#ghgra[To Create an Audit Module] |
| * link:#ghgsm[To List Audit Modules] |
| * link:#ghgpo[To Delete an Audit Module] |
| |
| [[ghgra]][[GSSCG00101]][[to-create-an-audit-module]] |
| |
| ==== To Create an Audit Module |
| |
| Use the `create-audit-module` subcommand in remote mode to create an |
| audit module for the add-on component that implements the audit |
| capabilities. |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. Create an audit module by using the |
| link:reference-manual/create-audit-module.html#GSRFM00014[`create-audit-module`] subcommand. |
| + |
| Information about properties for this subcommand is included in this |
| help page. |
| |
| [[GSSCG00067]][[ghjlw]] |
| Example 1-8 Creating an Audit Module |
| |
| This example creates an audit module named `sampleAuditModule`: |
| |
| [source] |
| ---- |
| asadmin> create-audit-module |
| --classname com.sun.appserv.auditmodule --property defaultuser= |
| admin:Password=admin sampleAuditModule |
| Command create-audit-module executed successfully. |
| ---- |
| |
| [[sthref14]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help create-audit-module` at the command line. |
| |
| [[ghgsm]][[GSSCG00102]][[to-list-audit-modules]] |
| |
| ==== To List Audit Modules |
| |
| Use the `list-audit-modules` subcommand in remote mode to list the audit |
| modules on one of the following targets: |
| |
| * Server instance, `server` (the default) |
| * Specified server instance |
| * Specified configuration |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. List the audit modules by using the |
| link:reference-manual/list-audit-modules.html#GSRFM00149[`list-audit-modules`] subcommand. |
| |
| [[GSSCG00068]][[ghjmy]] |
| Example 1-9 Listing Audit Modules |
| |
| This example lists the audit modules on `localhost`: |
| |
| [source] |
| ---- |
| asadmin> list-audit-modules |
| audit-module : default |
| audit-module : sampleAuditModule |
| Command list-audit-modules executed successfully. |
| ---- |
| |
| [[sthref15]] |
| |
| See Also |
| |
| You can also view the full syntax and options of the subcommand by |
| typing `asadmin help list-audit-modules` at the command line. |
| |
| [[ghgpo]][[GSSCG00104]][[to-delete-an-audit-module]] |
| |
| ==== To Delete an Audit Module |
| |
| Use the `delete-audit-module` subcommand in remote mode to delete an |
| existing audit module. |
| |
| 1. Ensure that the server is running. Remote subcommands require a running server. |
| 2. List the audit modules by using the |
| link:reference-manual/list-audit-modules.html#GSRFM00149[`list-audit-modules`] subcommand. |
| 3. Delete an audit module by using the |
| link:reference-manual/delete-audit-module.html#GSRFM00065[`delete-audit-module`] subcommand. |
| |
| [[GSSCG00070]][[ghjhm]] |
| Example 1-10 Deleting an Audit Module |
| |
| This example deletes `sampleAuditModule`: |
| |
| [source] |
| ---- |
| asadmin> delete-audit-module sampleAuditModule |
| Command delete-audit-module executed successfully. |
| ---- |
| |
| [[ablqz]][[GSSCG00147]][[administering-jsse-certificates]] |
| |
| === Administering JSSE Certificates |
| |
| In the developer profile, the {productName} 7 uses the JSSE format |
| on the server side to manage certificates and key stores. In all |
| profiles, the client side (appclient or stand-alone) uses the JSSE |
| format. |
| |
| The Java SE SDK ships with the `keytool` utility, which enables you to |
| set up and work with Java Secure Socket Extension (JSSE) digital |
| certificates. You can administer public/private key pairs and associated |
| certificates, and cache the public keys (in the form of certificates) of |
| their communicating peers. |
| |
| The following topics are addressed here: |
| |
| * link:#ghlgv[To Generate a Certificate by Using `keytool`] |
| * link:#ghlgj[To Sign a Certificate by Using `keytool`] |
| * link:#ghleq[To Delete a Certificate by Using `keytool`] |
| |
| [[ghlgv]][[GSSCG00105]][[to-generate-a-certificate-by-using-keytool]] |
| |
| ==== To Generate a Certificate by Using `keytool` |
| |
| By default, the `keytool` utility creates a keystore file in the |
| directory where the utility is run. |
| |
| [[sthref16]] |
| |
| Before You Begin |
| |
| To run the `keytool` utility, your shell environment must be configured |
| so that the Java SE ``/bin`` directory is in the path, otherwise the full |
| path to the utility must be present on the command line. |
| |
| 1. Change to the directory that contains the keystore and truststore files. + |
| Always generate the certificate in the directory containing the keystore |
| and truststore files. The default is domain-dir``/config``. |
| 2. Generate the certificate in the keystore file, `keystore.jks`, using |
| the following command format: |
| + |
| [source] |
| ---- |
| keytool -genkey -alias keyAlias-keyalg RSA |
| -keypass changeit |
| -storepass changeit |
| keystore keystore.jks |
| ---- |
| Use any unique name as your keyAlias. If you have changed the keystore |
| or private key password from the default (`changeit`), substitute the |
| new password for `changeit`. The default key password alias is `s1as`. |
| + |
| A prompt appears that asks for your name, organization, and other information. |
| 3. Export the generated certificate to the `server.cer` file (or |
| `client.cer` if you prefer), using the following command format: |
| + |
| [source] |
| ---- |
| keytool -export -alias keyAlias-storepass changeit |
| -file server.cer |
| -keystore keystore.jks |
| ---- |
| 4. If a certificate signed by a certificate authority is required, see |
| link:#ghlgj[To Sign a Certificate by Using `keytool`]. |
| 5. Create the `cacerts.jks` truststore file and add the certificate to |
| the truststore, using the following command format: |
| + |
| [source] |
| ---- |
| keytool -import -v -trustcacerts |
| -alias keyAlias |
| -file server.cer |
| -keystore cacerts.jks |
| -keypass changeit |
| ---- |
| If you have changed the keystore or private key password from the |
| default (`changeit`), substitute the new password. |
| + |
| Information about the certificate is displayed and a prompt appears |
| asking if you want to trust the certificate. |
| 6. Type `yes`, then press Enter. |
| + |
| Information similar to the following is displayed: |
| + |
| [source] |
| ---- |
| Certificate was added to keystore |
| [Saving cacerts.jks] |
| ---- |
| 7. To apply your changes, restart {productName}. See |
| "link:administration-guide/domains.html#GSADG00337[To Restart a Domain]" in {productName} Administration Guide. |
| |
| [[GSSCG00071]][[ghlii]] |
| Example 1-11 Creating a Self-Signed Certificate in a JKS Keystore by |
| Using an RSA Key Algorithm |
| |
| RSA is public-key encryption technology developed by RSA Data Security, |
| Inc. |
| |
| [source] |
| ---- |
| keytool -genkey -noprompt -trustcacerts -keyalg RSA -alias ${cert.alias} |
| -dname ${dn.name} -keypass ${key.pass} -keystore ${keystore.file} |
| -storepass ${keystore.pass} |
| ---- |
| |
| [[GSSCG00072]][[ghlew]] |
| Example 1-12 Creating a Self-Signed Certificate in a JKS Keystore by |
| Using a Default Key Algorithm |
| |
| [source] |
| ---- |
| keytool -genkey -noprompt -trustcacerts -alias ${cert.alias} -dname |
| ${dn.name} -keypass ${key.pass} -keystore ${keystore.file} -storepass |
| ${keystore.pass} |
| ---- |
| |
| [[GSSCG00073]][[ghldw]] |
| Example 1-13 Displaying Available Certificates From a JKS Keystore |
| |
| [source] |
| ---- |
| keytool -list -v -keystore ${keystore.file} -storepass ${keystore.pass} |
| ---- |
| |
| [[GSSCG00074]][[ghlfd]] |
| Example 1-14 Displaying Certificate information From a JKS Keystore |
| |
| [source] |
| ---- |
| keytool -list -v -alias ${cert.alias} -keystore ${keystore.file} |
| -storepass ${keystore.pass} |
| ---- |
| |
| [[sthref17]] |
| |
| See Also |
| |
| [[ghlgj]][[GSSCG00106]][[to-sign-a-certificate-by-using-keytool]] |
| |
| ==== To Sign a Certificate by Using `keytool` |
| |
| After creating a certificate, the owner must sign the certificate to |
| prevent forgery. E-commerce sites, or those for which authentication of |
| identity is important, can purchase a certificate from a well-known |
| Certificate Authority (CA). |
| |
| |
| [NOTE] |
| ==== |
| If authentication is not a concern, for example if private secure |
| communications are all that is required, you can save the time and |
| expense involved in obtaining a CA certificate by using a self-signed |
| certificate. |
| ==== |
| |
| |
| 1. Delete the default self-signed certificate: |
| + |
| [source] |
| ---- |
| keytool -delete -alias s1as -keystore keystore.jks -storepass <store_passwd> |
| ---- |
| where <store_passwd> is the password for the keystore. For example, |
| "mypass". Note that `s1as` is the default alias of the {productName} |
| keystore. |
| 2. Generate a new key pair for the application server: |
| + |
| [source] |
| ---- |
| keytool -genkeypair -keyalg <key_alg> -keystore keystore.jks |
| -validity <val_days> -alias s1as |
| ---- |
| where <key_alg> is the algorithm to be used for generating the key pair, |
| for example RSA, and <val_days> is the number of days that the |
| certificate should be considered valid. For example, 365. |
| + |
| In addition to generating a key pair, the command wraps the public key |
| into a self-signed certificate and stores the certificate and the |
| private key in a new keystore entry identified by the alias. |
| + |
| For HTTPS hostname verification, it is important to ensure that the name |
| of the certificate (CN) matches the fully-qualified hostname of your |
| site (fully-qualified domain name). If the names do not match, clients |
| connecting to the server will see a security alert stating that the name |
| of the certificate does not match the name of the site. |
| 3. Generate a Certificate Signing Request (CSR): |
| + |
| [source] |
| ---- |
| keytool -certreq -alias s1as -file <certreq_file> -keystore keystore.jks |
| -storepass <store_passwd> |
| ---- |
| where <certreq_file> is the file in which the CSR is stored (for |
| example, `s1as.csr`) and <store_passwd> is the password for the |
| keystore. For example, changeit. |
| 4. Submit the CSR to a Certificate Authority such as VeriSign (at |
| `http://www.verisign.com/ssl/buy-ssl-certificates/index.html`). In |
| response, you should receive a signed server certificate. Make sure to |
| import into your browser the CA certificate of the CA (if not already |
| present) and any intermediate certificates indicated by the CA in the |
| reply. |
| 5. Store the signed server certificate from the CA, including the |
| markers `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`, |
| into a file such as `s1as.cert`. Download the CA certificate and any |
| intermediate CA certificates and store them in local files. |
| 6. Import the CA certificate (if not already present) and any |
| intermediate CA certificates (if not already present) indicated by the |
| CA into the truststore `cacerts.jks`: |
| + |
| [source] |
| ---- |
| keytool -import -v -trustcacerts -alias <CA-Name> -file ca.cert |
| -keystore cacerts.jks -storepass <store_passwd> |
| ---- |
| 7. Replace the original self-signed certificate with the certificate |
| you obtained from the CA, as stored in a file such as `s1as.cert`: |
| + |
| [source] |
| ---- |
| keytool -import -v -trustcacerts -alias s1as -file s1as.cert |
| -keystore keystore.jks -storepass <store_passwd> |
| ---- |
| When you import the certificate using the same original alias `s1as`, |
| keytool treats it as a command to replace the original certificate with |
| the certificate obtained as a reply to a CSR. |
| + |
| After running the command, you should see that the certificate `s1as` in |
| the keystore is no longer the original self-signed certificate, but is |
| now the response certificate from the CA. |
| + |
| Consider the following example that compares an original `s1as` |
| certificate with a new `s1as` certificate obtained from VeriSign: |
| + |
| [source] |
| ---- |
| Original s1as (self-signed): |
| |
| Owner: CN=FQDN, OU=Sun Java System Application Server, O=Sun |
| Microsystems, L=Santa Clara, ST=California, C=US |
| Issuer: CN=KUMAR, OU=Sun Java System Application Server, O=Su |
| n Microsystems, L=Santa Clara, ST=California, C=US |
| Serial number: 472acd34 |
| Valid from: Fri Nov 02 12:39:40 GMT+05:30 2007 until: Mon Oct |
| 30 12:39:40 GMT+05:30 2017 |
| |
| New s1as (contains signed cert from CA): |
| |
| Owner: CN=FQDN, OU=Terms of use at www.verisign.com/cps/test |
| ca (c)05, OU=Sun Java System Application Server, O=Sun Micros |
| ystems, L=Santa Clara, ST=California, C=US |
| Issuer: CN=VeriSign Trial Secure Server Test CA, OU=Terms of |
| use at https://www.verisign.com/cps/testca (c)05, OU="For Test |
| Purposes Only. No assurances.", O="VeriSign, Inc.", C=US |
| Serial number: 1375de18b223508c2cb0123059d5c440 |
| Valid from: Sun Nov 11 05:30:00 GMT+05:30 2007 until: Mon Nov |
| 26 05:29:59 GMT+05:30 2007 |
| ---- |
| 8. To apply your changes, restart {productName}. |
| + |
| See "link:administration-guide/domains.html#GSADG00337[To Restart a Domain]" in {productName} Administration Guide. |
| |
| [[GSSCG00075]][[ghlhu]] |
| Example 1-15 Importing an RFC/Text-Formatted Certificate Into a JKS |
| Keystore |
| |
| Certificates are often stored using the printable encoding format |
| defined by the Internet Request for Comments (RFC) 1421 standard instead |
| of their binary encoding. This certificate format, also known as Base 64 |
| encoding, facilitates exporting certificates to other applications by |
| email or through some other mechanism. |
| |
| [source] |
| ---- |
| keytool -import -noprompt -trustcacerts -alias ${cert.alias} -file |
| ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass} |
| ---- |
| |
| [[GSSCG00076]][[ghlim]] |
| Example 1-16 Exporting a Certificate From a JKS Keystore in PKCS7 Format |
| |
| The reply format defined by the Public Key Cryptography Standards #7, |
| Cryptographic Message Syntax Standard, includes the supporting |
| certificate chain in addition to the issued certificate. |
| |
| [source] |
| ---- |
| keytool -export -noprompt -alias ${cert.alias} -file ${cert.file} |
| -keystore ${keystore.file} -storepass ${keystore.pass} |
| ---- |
| |
| [[GSSCG00077]][[ghleb]] |
| Example 1-17 Exporting a Certificate From a JKS Keystore in RFC/Text |
| Format |
| |
| [source] |
| ---- |
| keytool -export -noprompt -rfc -alias ${cert.alias} -file |
| ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass} |
| ---- |
| |
| [[sthref18]] |
| |
| See Also |
| |
| [[ghleq]][[GSSCG00107]][[to-delete-a-certificate-by-using-keytool]] |
| |
| ==== To Delete a Certificate by Using `keytool` |
| |
| Use the `keytool` `delete` command to delete an existing certificate. |
| |
| Delete a certificate using the following command format: |
| |
| [source] |
| ---- |
| keytool -delete |
| -alias keyAlias |
| -keystore keystore-name |
| -storepass password |
| ---- |
| |
| [[GSSCG00078]][[ghlgy]] |
| Example 1-18 Deleting a Certificate From a JKS Keystore |
| |
| [source] |
| ---- |
| keytool -delete -noprompt -alias ${cert.alias} -keystore ${keystore.file} |
| -storepass ${keystore.pass} |
| ---- |
| |
| [[sthref19]] |
| |
| See Also |
| |
| [[gkngj]][[GSSCG00148]][[administering-jacc-providers]] |
| |
| === Administering JACC Providers |
| |
| The Java Authorization Contract for Containers (JACC) is part of the |
| J2EE 1.4 specification that defines an interface for pluggable |
| authorization providers. This enables the administrator to set up |
| third-party plug-in modules to perform authorization. |
| |
| {productName} includes Administration Console support and subcommands |
| to support JACC providers, as follows: |
| |
| * create `create-jacc-provider` |
| * delete `delete-jacc-provider` |
| * list `list-jacc-providers` |
| |
| The default {productName} installation includes two JACC providers, |
| named default and simple. You should not delete these default providers. |
| Any JACC providers you create with the `create-jacc-provider` subcommand |
| are in addition to these two default providers. |
| |
| The {productName} creates a JSR-115-compliant JACC provider that you |
| can use with third-party authorization modules for applications running |
| in {productName}. The JACC provider is created as a `jacc-provider` |
| element within the security-service element in the domain's `domain.xml` |
| file. |
| |
| [[gksgp]][[GSSCG00108]][[administering-jacc-providers-from-the-administration-console]] |
| |
| ==== Administering JACC Providers From the Administration Console |
| |
| To use the Administration Console to administer JACC providers, perform |
| the following steps: |
| |
| 1. Select Configurations and expand the entry. |
| 2. Select the server configuration for which you want to administer |
| JACC providers and expand the entry. |
| 3. Select Security and expand the entry. |
| 4. Select JACC Providers. The JACC Providers page is displayed. The |
| existing JACC providers are shown on this page. |
| + |
| image:img/jacc-providers.png[ |
| "This screen shot shows the default JACC providers."] |
| |
| 5. To create a new provider, click New. |
| + |
| Enter the Name, Policy Configuration (the class that implements the |
| policy configuration factory) and the Policy Provider (the class that |
| implements the policy factory) for the new JACC provider. You can also |
| enter optional properties (name/value) for the provider. |
| 6. To delete an existing JACC provider, select that provider and click |
| Delete. |
| |
| [[gksfx]][[GSSCG00109]][[administering-jacc-providers-from-the-command-line]] |
| |
| ==== Administering JACC Providers from the Command Line |
| |
| To use the command line to administer JACC providers, perform the |
| following steps: |
| |
| 1. To create a JACC provider, use the `create-jacc-provider` |
| subcommand. The following example shows how to create a JACC provider |
| named testJACC on the default server target. |
| + |
| [source] |
| ---- |
| asadmin> create-jacc-provider |
| --policyproviderclass org.glassfish.exousia.modules.locked.SimplePolicyProvider |
| --policyconfigfactoryclass com.sun.enterprise.security.provider.PolicyCon |
| figurationFactoryImpl |
| testJACC |
| ---- |
| 2. To delete a JACC provider, use the `create-jacc-provider` |
| subcommand. The following example shows how to delete a JACC provider |
| named testJACC from the default domain: |
| + |
| [source] |
| ---- |
| asadmin> delete-jacc-provider testJACC |
| ---- |
| 3. To list the available providers, use the `list-jacc-providers` |
| subcommand. The following example shows how to list JACC providers for |
| the default domain: |
| + |
| [source] |
| ---- |
| asadmin> list-jacc-providers |
| default |
| simple |
| Command list-jacc-providers executed successfully. |
| ---- |
| |
| |