IBM 64-bit SDK for Windows AMD64/EM64T architecture, Java 2 Technology Edition, Version 1.4.2

Security Guide


Copyright information

Note: Before using this information and the product it supports, read the general information under Notices.

This edition of the User Guide applies to:

and to all subsequent releases, modifications, and service refreshes, until otherwise indicated in new editions.

(c) Copyright Sun Microsystems, Inc. 1997, 2003, 901 San Antonio Rd., Palo Alto, CA 94303 USA. All rights reserved.

(c) Copyright International Business Machines Corporation, 1999, 2007. All rights reserved.

U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

Preface

The security components described in this User Guide are shipped with the SDK and are not extensions. They provide a wide range of security services through standard Java APIs (except iKeyman). The security components contain the IBM implementation of various security algorithms and mechanisms.

The IBM(R) SDK v1.4.2 also provides two FIPS 140-2 certified cryptographic modules, IBMJSSEFIPS and IBMJCEFIPS. They are implemented as JSSE and JCE providers respectively. Because they support FIPS-approved cryptographic algorithms and TLS cipher suites (in IBMJSSEFIPS) only, applications that are written using these two modules must comply with the FIPS 140-2 requirements.

The CertPath component provides PKIX-compliant certification path building and validation.

The JGSS component provides a generic API that can be plugged in by different security mechanisms. IBM JGSS uses Kerberos V5 as the default mechanism for authentication and secure communication.

The JAAS component provides a means for principal-based authentication and authorization

The JCE framework has two providers: IBMJCE is the pre-registered default provider; IBMJCEFIPS is optional.

JSSE is the Java(TM) implementation of the SSL and TLS protocols. It has three providers: IBMJSSE is the pre-registered default provider, IBMJSSE2 and IBMJSSEFIPS are optional.

The Java security configuration file does not refer to the Sun provider. The IBM JCE provider has replaced the Sun provider. The JCE supplies all the signature handling message digest algorithms that were previously supplied by the Sun provider. It also supplies the IBM secure random number generator, IBMSecureRandom, which is a real Random Number Generator. SHA1PRNG is a Pseudo Random Number Generator and is supplied for code compatibility. SHA1PRNG is not guaranteed to produce the same output as the SUN SHA1PRNG.

In the IBM SDK v1.4.1, the following options were added to the java.security.debug property to help you debug Java Cryptography Architecture (JCA)-related problems:

An example of a valid option string is "provider, algorithm:stack".

In this guide, you'll see a 'What's new' section for each component, even though this platform was not available at the 1.4.0 and 1.4.1 levels. This information is provided to help you with migration.

Contents

Copyright information
Preface
General Information about IBM security providers
iKeyman tool
What's new?
Documentation
Java Authentication and Authorization Service (JAAS) V2.0 for Windows, 64-bit version
Differences between IBM and Sun versions of JAAS
What's new?
Documentation
Active Login
Using JAAS Active Login
Java Certification Path (CertPath)
Differences between IBM and Sun versions of CertPath
What's new?
Documentation
Java Cryptography Extension (JCE)
Differences between IBM and Sun versions of JCE
What's new?
Documentation
Java Generic Security Service (JGSS)
Differences between IBM and Sun versions of JGSS
What's new?
Documentation
IBM Java Secure Socket Extension (IBMJSSE)
Anonymous ciphers
Differences between IBM and Sun versions of JSSE
What's new?
Documentation
IBMJSSE2 Provider
Differences between the IBMJSSE Provider and the IBMJSSE2 Provider
Differences between the IBMJSSE2 Provider and Sun's version of JSSE
What's new?
Documentation
IBMJCEFIPS Provider
Differences between IBM and Sun versions of IBMJCEFIPS
What's new?
Documentation
IBMJSSEFIPS Provider
Differences between IBM and Sun versions of IBMJSSEFIPS
What's new?
Documentation
Notices
Trademarks

General Information about IBM security providers

The IBM SDK v1.4.2 has been tested with the following default security providers:

You can add other IBM security providers either statically or from within your Java application's code. To add a new provider statically, edit a java security properties file (for example, java.security). To add a new provider from your application's code, use the methods of the java.security.Security class (for example, java.security.Security.addProvider()).

You can also add the following IBM security providers:

Notes:
  1. You can specify both jsse providers (IBMJSSE and IBMJSSE2) but you should specify the original IBMJSSE provider, com.ibm.jsse.IBMJSSEProvider, first for compatability reasons. Note that code written for the IBMJSSE Provider might not compile or execute in exactly the same way for IBMJSSE2. For details, see Differences between the IBMJSSE Provider and the IBMJSSE2 Provider.
  2. The IBMJSSE framework uses the original JSSE provider, IBMJSSE, so that, if you invoke the method getDefault() on the classes SSLSocketFactory, SSLServerSocketFactory and HttpsURLConnection, the com.ibm.jsse.IBMJSSEProvider class will be used irrespective of the order in the provider. To ensure that the getDefault() and getDefaultSSLSocketFactory() use the IBMJSSE2 Provider:
    1. Add the IBMJSSE2 provider before the IBMJSSE provider in the provider list.
    2. Set the default SSLSocketFactory and SSLServerSocketFactory implementation to be IBMJSSE2. That is, set the ssl.SocketFactory.provider security property to the value com.ibm.jsse2.SSLSocketFactoryImpl and the ssl.ServerSocketFactory.provider security property to the value com.ibm.jsse2.SSLServerSocketFactoryImpl.

iKeyman tool

The iKeyman utility is a tool for managing your digital certificates. With iKeyman, you can:

What's new?

There are no changes in v1.4.2 over v1.4.1.

The following change was added in v1.4.1:

Documentation

The iKeyman User Guide is on the developerWorks(R) Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Java Authentication and Authorization Service (JAAS) V2.0 for Windows, 64-bit version

The Sun Microsystems Java 2 platform provides a means to enforce access controls based on where code came from and who signed it. These access controls are needed because of the distributed nature of the Java platform where, for example, a remote applet can be downloaded over a public network and then run locally.

However, before SDK v1.4.0, the Java 2 platform did not provide a way to enforce similar access controls based on who runs the code. To provide this type of access control, the Java 2 security architecture requires the following:

The Java Authentication and Authorization Service (JAAS) framework provides these enhancements.

For a general overview of JAAS, see the Sun Web site: http://java.sun.com/products/jaas.

Differences between IBM and Sun versions of JAAS

The IBM version of JAAS differs from the Sun version in the following way:

What's new?

There are no changes from the previous versions.

Documentation

To use the JAAS APIs, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Active Login

The IBM version of JAAS for Windows(R) contains an additional function called Active Login. Because Windows has an extensive security infrastructure, it is important on servers to allow a Java program to log in as a particular Windows user and run with the underlying operating system knowing the security identity on a particular thread. Without this extended support (speaking strictly of Java Technology), JAAS would allow Java programs to know who the user is. With this extended support, Java programs can log in as different users and have non-Java programs (such as the Windows kernel) enforce security.

The following classes contain the additional support for Active Login:

These classes are described in the JAAS APIs that are included with this product.

Using JAAS Active Login

To log in on Windows, an authorized program is required. The bin subdirectory of the directory where the Runtime Environment is installed contains a Windows service that can perform the login operation. To install the service and start it:

  1. Make sure that you are logged in as an Administrator on the computer where you want to install and start the service.
  2. Change directories to the bin directory.
  3. Type at a command prompt:
    jaaslogon -install

To stop the service and remove it from the Service Manager autostart list:

  1. Change directories to the bin directory.
  2. Type at a command prompt:
    jaaslogon -remove

Note:  If you do not remove JAASLogon from the Service Manager Autostart list and you uninstall the Runtime Environment, you will get a "Failed Service" error on the Windows log on. To remove the error, remove jaaslogon.exe from the Service Manager Autostart list.

Java Certification Path (CertPath)

The Java Certification Path API provides interfaces and abstract classes for creating, building, and validating certification paths (also known as "certificate chains").

Differences between IBM and Sun versions of CertPath

The IBM CertPath classes differ from the Sun version in the following ways:

What's new?

The following changes were added in v1.4.2:

The following changes were added in v1.4.1 SR1:

There were no changes in v1.4.1 over v1.4.0.

The following changes were added in v1.4.0:

Documentation

For detailed information, including API documentation and samples, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Java Cryptography Extension (JCE)

The Java Cryptography Extension (JCE) provides a framework and implementations for encryption, key generation and key agreement, and Message Authentication Code (MAC) algorithms. Support for encryption includes symmetric, asymmetric, block, and stream ciphers. The software also supports secure streams and sealed objects. JCE supplements the Java 2 platform, which already includes interfaces and implementations of message digests and digital signatures.

You can obtain unrestricted jurisdiction policy files from http://www.ibm.com/developerworks/java/jdk/security/index.html.

Note that the v1.4.1 unrestricted (and restricted) jurisdiction policy files are not suitable for use with v1.4.2 and will cause security exceptions.

Differences between IBM and Sun versions of JCE

The com.sun.* packages are reimplemented by IBM and renamed com.ibm.* packages.

The IBM version of JCE differs from the Sun version in the following ways:

What's new?

The following changes were made in v1.4.2:

There were no changes in v1.4.1 from v1.4.0.

The following changes were made in v1.4.0:

Documentation

For detailed information, including API documentation and samples, see the developerWorks Web site at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Java Generic Security Service (JGSS)

The Java Generic Security Service (JGSS) API provides secure exchange of messages between communicating applications.

The JGSS is an API framework that has Kerberos V5 as the underlying default security mechanism. The API is a standardized abstract interface under which you can plug different security mechanisms that are based on private-key, public-key, and other security technologies. JGSS shields secure applications from the complexities and peculiarities of the different underlying security mechanisms. JGSS provides identity and message origin authentication, message integrity, and message confidentiality. JGSS also features an optional Java Authentication and Authorization Service (JAAS) Kerberos login interface, and authorization checks. JAAS augments the access control features of Java 2, which is based on CodeSource with access controls based on authenticated principal identities.

Differences between IBM and Sun versions of JGSS

The IBM version of JGSS differs from the Sun version in the following ways:

What's new?

The following changes are added in v1.4.2:

Configurable Kerberos Settings
You can provide the name and realm settings for the Kerberos Key Distribution Center (KDC) either from the Kerberos configuration file or by using the system properties files java.security.krb5.kdc and java.security.krb5.realm. You can also specify the boolean option refreshKrb5Config in the entry for Krb5LoginModule in the JAAS configuration file. If you set this option to true, the configuration values will be refreshed before the login method of the Krb5LoginModule is called.

Support for Slave Kerberos Key Distribution Center
Kerberos uses slave KDCs so that, if the master KDC is unavailable, the slave KDCs will respond to your requests. In previous releases, Kerberos tried the master KDC only and would give up if there was no response within the default KDC timeout.

Support TCP for Kerberos Key Distribution Center Transport
Kerberos uses UDP transport for ticket requests. In cases where Kerberos tickets exceed the UDP packet size limit, Kerberos supports automatic fallback to TCP. If a Kerberos ticket request using UDP fails and the KDC returns the error code KRB_ERR_RESPONSE_TOO_BIG, TCP becomes the transport protocol.

Kerberos Service Ticket in the Subject's Private Credentials
The Kerberos service ticket is stored in the Subject's private credentials. This gives you access to the service ticket so that you can use it outside the JGSS (for example, in native applications or for proprietary uses). In addition, you can reuse the service ticket if the application tries to establish a security context to the same service again. The service ticket should be valid for it to be reusable.

The following change was added in v1.4.1:

Documentation

For detailed information about JGSS, including API documentation and samples, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

IBM Java Secure Socket Extension (IBMJSSE)

The Java Secure Socket Extension (JSSE) is a Java package that enables secure Internet communications. It implements a Java version of SSL (Secure Sockets Layer) and TLS (Transport Layer Security) protocols and includes functions for data encryption, server authentication, message integrity, and optional client authentication.

By abstracting the complex underlying security algorithms and "handshaking" mechanisms, JSSE minimizes the risk of creating subtle but dangerous security vulnerabilities. Also, it simplifies application development by serving as a building block that you can integrate directly into your applications. Using JSSE, you can provide for the secure passage of data between a client and a server running any application protocol (such as HTTP, Telnet, NNTP, and FTP) over TCP/IP.

Anonymous ciphers

The IBM JSSE Provider default implementation does not allow anonymous ciphers. However, you can override the default implementation by writing a TrustManager class that allows anonymous ciphers.

Differences between IBM and Sun versions of JSSE

The known differences between the IBM JSSE and Sun JSSE implementations are described below. These differences do not affect either the API specifications or the JSSE architecture.

What's new?

The following change takes effect from v1.4.2 Service Refresh 8:

The following changes are added in v1.4.2:

There were no changes in v1.4.1 from v1.4.0.

The following changes were added in v1.4.0:

Documentation

For detailed information, including API documentation and samples, see the developerWorks Web site, athttp://www.ibm.com/developerworks/java/jdk/security/index.html.

IBMJSSE2 Provider

The IBMJSSE2 Provider is a new provider included with the SDK. It is not pre-registered in the java.security properties file included with the SDK.

The IBMJSSE2 Provider has improved serviceability because the tracing and debugging information that is supplied has been improved to assist with problem determination. Also, the tracing is now configurable.

The IBMJSSE2 Provider uses the IBM JCE providers, IBMJCE, IBMJCEFIPS, and IBMJCE4758 only. The IBMJSSE2 Provider cannot be configured to use another JCE provider because of US government export regulations.

The IBMJSSE2 Provider does not contain cryptographic code because it uses cryptographic support from the IBMJCEFIPS Provider. Therefore, IBMJSSE2 is not required to be FIPS certified.

The IBMJSSE2 Provider, in addition to the simple X.509 based trustmanager also supported by the IBMJSSE Provider, supports a second, PKIX-compliant trust manager.

Differences between the IBMJSSE Provider and the IBMJSSE2 Provider

The IBMJSSE Provider and the IBMJSSE2 Provider differ in the following way:

Differences between the IBMJSSE2 Provider and Sun's version of JSSE

The IBMJSSE2 Provider differs from the Sun JSSE in the following ways:

What's new?

The IBMJSSE2 Provider is new for v1.4.2.

The following change takes effect from v1.4.2 Service Refresh 8:

Documentation

For detailed information, including API documentation and samples, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

IBMJCEFIPS Provider

The IBM Java JCE (Java Cryptographic Extension) FIPS Provider (IBMJCEFIPS) for multi-platforms is a scalable, multi-purpose cryptographic module that supports FIPS-approved cryptographic operations through Java APIs. The IBMJCEFIPS includes the following Federal Information Processing Standards (FIPS) 140-2 [Level 1] compliant components:

To meet the requirements specified in the FIPS publication 140-2, the encryption algorithms used by the IBMJCEFIPS Provider are isolated into the IBMJCEFIPS Provider cryptographic module, which you can access using the product code from the Java JCE framework APIs. Because the IBMJCEFIPS Provider uses the cryptographic module in an approved manner, the product complies with the FIPS 140-2 requirements.

Type Algorithm Specification
Symmetric Cipher AES (ECB, CBC, OFB, CFB and PCBC) FIPS 197
Symmetric Cipher
DES (ECB, CBC, OFB, CFB and PCBC) - for legacy systems only
Triple DES (ECB, CBC, OFB, CFB and PCBC)
FIPS 46-3
Message Digest
SHA1
HMAC-SHA1
FIPS 180-1
FIPS 198
Asymmetric Cipher RSA PKCS#1
Key Agreement Diffie-Hellman PKCS #3 (Allowed in Approved mode)
Random Number Generator X 9.31 PRNG ANSI X 9.31 1998
Random Number Generator FIPS 186-2 Appendix 3.1 FIPS 186-2
Digital Signature DSA (512 - 1024) FIPS 186-2
Digital Signature RSA (512 - 2048) FIPS 186-2

In addition, the IBMJCEFIPS supports the following unapproved algorithms:

Type Algorithm Specification
Random Number Generation Universal Software Based Random Number Generator Available upon request from IBM. Patented by IBM, EC Pat. No. EP1081591A2, U.S. pat. Pend.
Note:
The com.ibm.crypto.fips.provider.IBMJCEFIPS class does not include a keystore (such as JKS or JCEKS) because of FIPS requirements and algorithms. Therefore, if you are using com.ibm.crypto.fips.provider.IBMJCEFIPS and require JKS, you must specify the com.ibm.crypto.provider.IBMJCE in the provider list.

For more detailed information on the FIPS certified providers (IBMJCEFIPS and IBMJSSEFIPS) see the IBM Java JCE FIPS 140-2 Cryptographic Module Security Policy, and the IBM Java JSSE FIPS 140-2 Cryptographic Module Security Policy. For usage information and details of the API, see the IBM Java JCE FIPS (IBMJCEFIPS) Cryptographic Module API document. All these documents are available at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Differences between IBM and Sun versions of IBMJCEFIPS

Sun does not provide IBMJCEFIPS.

What's new?

The IBMJCEFIPS Provider is new for v1.4.2.

Documentation

For detailed information, including API documentation and Security Policy, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

IBMJSSEFIPS Provider

The IBM Java JSSE (Java Secure Sockets Extension) FIPS 140-2 Cryptographic Module (IBMJSSEFIPS) for Multi-platforms is a scalable, multi-purpose Secure Sockets provider that supports FIPS-approved TLS cipher suites through the Java APIs. The IBMJSSEFIPS includes the following Federal Information Processing Standards (FIPS) 140-2 [1] compliant components:

To meet the requirements specified in the FIPS publication 140-2, the encryption algorithms used by the IBMJSSEFIPS Provider are isolated into the IBMJSSEFIPS Provider cryptographic module, which you can access using the product code from the Java JSSE framework APIs. Because the IBMJSSEFIPS Provider uses the cryptographic module in an approved manner, the product complies with the FIPS 140-2 requirements.

The IBMJSSEFIPS module supports the TLS protocol and the following cipher suites:

The IBMJSSEFIPS module has no direct user interfaces. This module is a JSSE provider and the interface to it is from the JSSE framework APIs only. Your Java code should use only those IBM JSSE interfaces that are documented in the JSSE API User's Guide and associated IBMJSSEProvider Class Documentation. For more information, see the IBM Java JSSE FIPS 140-2 Cryptographic Module Security Policy. You can find these guides at http://www.ibm.com/developerworks/java/jdk/security/index.html

Differences between IBM and Sun versions of IBMJSSEFIPS

Sun does not provide IBMJSSEFIPS.

What's new?

The IBMJSSEFIPS Provider is new for v1.4.2.

Documentation

For detailed information, including API documentation and Security Policy, see the developerWorks Web site, at http://www.ibm.com/developerworks/java/jdk/security/index.html.

Notices

This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.

IBM may have patents or pending patent applications covering subject matter in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to:

For license inquiries regarding double-byte (DBCS) information, contact the IBM Intellectual Property Department in your country or send inquiries, in writing, to:

The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law:

INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.

This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the information. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this information at any time without notice.

Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk.

IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you.

Licensees of this program who wish to have information about it for the purpose of enabling (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact:

Such information may be available, subject to appropriate terms and conditions, including in some cases, payment of a fee.

The licensed program described in this document and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Program License Agreement or any equivalent agreement between us.

Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurement may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment.

Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.

Trademarks

IBM, developerWorks, iSeries, pSeries, AS/400, and PowerPC are trademarks or registered trademarks of International Business Machines Corporation in the United States, or other countries, or both.

Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.

Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both

Other company, product, or service names may be trademarks or service marks of others.