JavaTM RMI Security - Early Look Draft 3

Legal Notices

Copyright © 2000 Sun Microsystems, Inc.
901 San Antonio Road, Palo Alto, CA 94303 USA

All rights reserved. Copyright in this document is owned by Sun Microsystems, Inc.

Sun Microsystems, Inc. has patent and other intellectual property rights relating to implementations of the technology described in this Specification ("Sun IPR"). Your limited right to use this Specification does not grant you any right or license to Sun IPR.

THIS SPECIFICATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY YOU AS A RESULT OF USING THE SPECIFICATION.

THIS SPECIFICATION COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE INFORMATION HEREIN; THESE CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THE SPECIFICATION. SUN MICROSYSTEMS, INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE SPECIFICATIONS AT ANY TIME, IN ITS SOLE DISCRETION. SUN IS UNDER NO OBLIGATION TO PRODUCE FURTHER VERSIONS OF THE SPECIFICATION OR ANY PRODUCT OR TECHNOLOGY BASED UPON THE SPECIFICATION. NOR IS SUN UNDER ANY OBLIGATION TO LICENSE THE SPECIFICATION OR ANY ASSOCIATED TECHNOLOGY, NOW OR IN THE FUTURE, FOR PRODUCTIVE OR OTHER USE.

RESTRICTED RIGHTS LEGEND

Use, duplication, or disclosure by the U.S. Government is subject to restrictions of FAR 52.227-14(g)(2)(6/87) and FAR 52.227-19(6/87), or DFAR 252.227-7015(b)(6/95) and DFAR 227.7202-1(a).

TRADEMARKS

Copyright © 2000 Sun Microsystems, Inc., All rights reserved.

Sun, Sun Microsystems, the Sun logo, and Java are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.

REPORT

As an Evaluation Posting of this Specification, you may wish to report any ambiguities, inconsistencies, or inaccuracies you may find in connection with your evaluation of the Specification ("Feedback"). To the extent that you provide Sun with any Feedback, you hereby: (i) agree that such Feedback is provided on a non-proprietary and non-confidential basis and (ii) grant to Sun a perpetual, non-exclusive, worldwide, fully paid-up, irrevocable license to incorporate, disclose, and use without limitation the Feedback for any purpose relating to the Specification and future versions, implementations, and test suites thereof.

Purpose

This is an early draft of a proposal to add standard security support to JavaTM Remote Method Invocation (RMI). The specification is incomplete, and will change to align with a future version of the JavaTM platform. The document is being published at this time to provide the community with an early look at our design and to solicit feedback on that design, so that we can incorporate any changes as a result of that feedback prior to any official public review. Comments about this draft should be sent to rmi-security-comments@sun.com.

Changes

Significant changes from previous draft:

Introduction

The Java 2 platform provides mechanisms for defining and using fine-grained access control policies, built around the notion of what code is being executed. Permission is granted to code, based on what location the code came from and who signed that code. The Java Authentication and Authorization Service (JAAS) extends the security architecture, providing mechanisms to authenticate subjects (at login), execute code on behalf of subjects, and grant permissions to subjects. The result is that access control policies can be based on both what code is being executed and who is executing that code.

This specification further extends the security architecture to distributed systems built using RMI, by providing mechanisms to mutually authenticate client and server subjects during a remote call, protect the communication from third parties, and execute code in the server on behalf of the client's subject.

The API defined by this specification is intentionally at a very high level; cryptographic mechanisms and protocols are not exposed, so that code written to the API is more portable. An underlying service provider interface allows specific mechanisms and protocols to be configured into the framework.

Although this specification defines additions to RMI, much of the API is designed to be applicable more generally to remote services that are defined in terms of interfaces. A remote service has a front-end proxy object that implements one or more interfaces; the proxy is downloaded into clients that want to use the service. An RMI stub is one form of proxy, but a proxy may also be a more sophisticated object that performs additional computation surrounding an RMI call, or one that uses alternate network protocols.The proxy is responsible for network communication with the back-end remote service, and the implementation of the proxy, including the details of the protocol it uses to communicate with the remote service, can be specialized to the particular implementation of the service. The client does not know about these implementation details; it only knows about the interfaces that define the service.

Reading the Documentation

The following is a suggested order for reading the API documentation and the tool documentation (rmisecregistry and rmisecd). Note that we recommend skipping the detailed semantics of constraint reduction at first, and coming back to it later if you want to understand how to implement a provider.
Copyright © 2000 Sun Microsystems, Inc. All rights reserved