Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Tài liệu Java 2 Network Security doc
PREMIUM
Số trang
702
Kích thước
5.6 MB
Định dạng
PDF
Lượt xem
1050

Tài liệu Java 2 Network Security doc

Nội dung xem thử

Mô tả chi tiết

SG24-2109-01

International Technical Support Organization

http://www.redbooks.ibm.com

Java 2 Network Security

Marco Pistoia, Duane F. Reller

Deepak Gupta, Milind Nagnur, Ashok K. Ramani

Java 2 Network Security

Marco Pistoia, Duane F. Reller

Deepak Gupta, Milind Nagnur, Ashok K. Ramani

Foreward by Li Gong

Distinguished Engineer and Chief Java Security Architect

Sun Microsystems, Inc.

June 1999

SG24-2109-01

International Technical Support Organization

© Copyright International Business Machines Corporation 1997 1999. All rights reserved.

Note to U.S Government Users – Documentation related to restricted rights – Use, duplication or disclosure is

subject to restrictions set forth in GSA ADP Schedule Contract with IBM Corp.

Second Edition (June 1999)

This edition applies to Java 2 SDK, Standard Edition, V 1.2.

Comments may be addressed to:

IBM Corporation, International Technical Support Organization

Dept. HZ8 Building 678

P.O. Box 12195

Research Triangle Park, NC 27709-2195

When you send information to IBM, you grant IBM a non-exclusive right to use or distribute the

information in any way it believes appropriate without incurring any obligation to you.

Before using this information and the product it supports, be sure to read the general information in

Appendix F, “Special Notices” on page 659.

Take Note!

© Copyright IBM Corp. 1999 3

Foreword

As the person who led the JavaSoft team that developed the Java security

technology discussed in this book, it is extremely gratifying to see people

spend their precious time writing about our technology and products. Every

engineer’s dream is to have his or her technology deployed and used by

thousands of others, and this book is a great help to Java developers who

write security-aware applications.

Security is a difficult subject to write about. On the one hand, security is in

people’s daily consciousness so that it appears easy to get across (to the

reader) some of the basic concepts. On the other hand, security applied to

computer and networking is often subtle and unexpected. Security also is

pervasive in that it touches all aspects of the computing technology, including

hardware, software, operating system, software libraries, communication

software, networking infrastructure, application software, user interface, and

management software. In order to understand security in any situation, one

has to understand the entire system under consideration as well as each

individual component so that one can identity their strengths and weaknesses

and design the appropriate solutions.

Java security is one of the more recent additions to the family of security

technologies. Ever since Sun Microsystems announced Java technology in

the spring of 1995, there has been strong and growing interest (in industry,

research laboratories, and academia) around the security of the Java platform

as well as new security issues raised by the deployment of Java technology.

Such close attention being paid to security is almost unprecedented in that

new computing technologies normally ignore security considerations when

they emerge initially. Most of them remain unsecured forever. In the few cases

where efforts are made to secure them later, the efforts are typically not very

successful because retrofitting security is usually very difficult, if possible at

all, and often causes backward compatibility problems.

Therefore, it is extremely fortunate that the Java technology had security as a

primary design goal from the very beginning. (Hats off to the original Java

development team. I joined JavaSoft only in 1996.) Although the initial

security model was very simplistic, it enabled later improvements in the

security architecture.

The Java language is a general-purpose object-oriented programming

language and is specifically designed to be platform independent so that

application developers can write a program once and then run it securely

4 Java 2 Network Security

everywhere on the Internet. To achieve this platform independence, a Java

program is compiled to a bytecode instruction set and binary format defined

in the Java Virtual Machine Specification. The Java platform consists of the

Java language and its associated tools (such as compilers), together with the

Java Virtual Machine (JVM) and its associated libraries that define a rich set

of application programming interfaces (APIs).

Security for the Java platform has multiple layers. First of all, the Java

language is strongly typed and does not include any unsafe constructs, such

as array accesses without index checking, because such unsafe constructs

may result in unspecified and unpredictable program behavior that can lead to

security compromises. Type safety is checked both at the time a piece of

bytecode is loaded into the JVM and throughout the lifetime of the bytecode

(that is, during run time) until it is no longer used and garbage collected.

Second, mechanisms (for example, class loaders) are in place to ensure a

sufficient degree of separation between multiple Java programs so that they

do not interfere with each other in undesirable ways.

Third, access to crucial system resources is mediated by the JVM. A security

manager is installed to deny all requests for unauthorized access. The access

control model, in the initial release of the Java Development Kit (JDK 1.0),

was to grant full access to local code (that is, trust such code and let it do

anything it wants) and to grant very restricted access to code loaded over the

network because such code (often referred to as applets) may not be trusted.

JDK 1.1 introduced a notion of trusted applets and granted full access to

these applets. The latest release, JDK 1.2 (also called Java 2), incorporates a

new security architecture that supports policy-driven, fine-grained, flexible,

and extensible access control. (For design rationales of this architecture, as

well as difficulties and subtleties we encountered during JDK 1.2

development, please refer to my book Inside Java 2 Platform Security.)

On top of type safety and access control, there are the Java Cryptography

Architecture (implemented in JDK 1.2 and in the Java Cryptography

Extension 1.2), support for secure communication (the Java Secure Socket

Extension), and a framework for user-based authentication and access

control (the Java Authentication and Authorization Service). These

technologies are at various stages in the development and release cycle.

Finally, applications can provide their own specific security features and can

customize security features that are built into the Java platform.

Our colleagues at IBM, among other industrial partners, have been closely

involved with the recent development of Java security technology. They have

supported our efforts in many ways, and have provided excellent technical

suggestions. This latest book from IBM is a comprehensive guidebook that

5

provides the programmer/reader with well-organized details of the Java

security APIs and their usage. The book is also broad in its coverage of the

wider security context and related issues.

I am very excited to see such a good book being published on Java security. It

will contribute greatly toward making the Java platform the most popular

deployment environment for secure computing.

Li Gong

Distinguished Engineer and Chief Java Security Architect

Sun Microsystems

Cupertino, California

May 1999

6 Java 2 Network Security

© Copyright IBM Corp. 1997 1999 vii

Contents

Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii

The Team That Wrote This Redbook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii

Comments Welcome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

Part 1. Introduction to Java and Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Chapter 1. An Overview of Java and Security . . . . . . . . . . . . . . . . . . . . 3

1.1 Java Is Not Just a Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 What Java Does . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Java Is Not an Island: Java as a Part of Security . . . . . . . . . . . . . . . . . 5

1.3.1 Safety and Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3.2 Java as an Aid to Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.3.3 Java as a Threat to Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.4 Writing Secure Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3.5 Staying One Jump Ahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3.6 The Vigilant Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4 Understanding Java 2 Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4.1 An Example of Applet Security in Java 2 . . . . . . . . . . . . . . . . . . 14

1.4.2 An Example of Application Security in Java 2 . . . . . . . . . . . . . . . 26

1.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Chapter 2. Attack and Defense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.1 Components of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.1.1 The Development Environment. . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.1.2 The Execution Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.1.3 Interfaces and Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

2.2 Java 2 and Cryptography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2.2.1 Cryptographic Tools in Brief . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.2.2 Java Cryptography Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 56

2.2.3 United States Export Rules for Encryption . . . . . . . . . . . . . . . . . 57

2.2.4 Signed Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.2.5 The Other Side of the Coin – Access Control . . . . . . . . . . . . . . . 59

2.3 Attacking the World of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

2.3.1 Perils in the Life of Remote Code . . . . . . . . . . . . . . . . . . . . . . . . 59

2.3.2 Vulnerabilities in Java Applications. . . . . . . . . . . . . . . . . . . . . . . 66

2.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Chapter 3. The New Java Security Model . . . . . . . . . . . . . . . . . . . . . . . 69

3.1 The Need for Java Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

viii Java 2 Network Security

3.2 Evolution of the Java Security Model . . . . . . . . . . . . . . . . . . . . . . . . . 70

3.2.1 The JDK 1.0 Sandbox Security Model . . . . . . . . . . . . . . . . . . . . 70

3.2.2 The Concept of Trusted Code in JDK 1.1 . . . . . . . . . . . . . . . . . . 72

3.2.3 The Fine-Grained Access Control of Java 2 . . . . . . . . . . . . . . . . 74

3.2.4 A Comparison of the Three Java Security Models . . . . . . . . . . . 78

3.3 Java 2 Protection Domain and Permissions Model . . . . . . . . . . . . . . . 80

3.4 New Class Search Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.4.1 Boot Class Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3.4.2 Extensions Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

3.4.3 Application Class Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

3.4.4 Class Search Paths in Summary . . . . . . . . . . . . . . . . . . . . . . . . 89

3.5 Java 2 Class Loading Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

3.5.1 Run-Time Access Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

3.6 The Policy File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.6.1 The Default System-Wide Policy File . . . . . . . . . . . . . . . . . . . . . 96

3.7 Security Manager vs Access Controller . . . . . . . . . . . . . . . . . . . . . . . 98

3.8 Security Management with Java 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

3.8.1 Applying a Security Manager to Applets and Applications. . . . . . 99

3.8.2 Applying a User-Defined Security Policy. . . . . . . . . . . . . . . . . . . 99

3.8.3 Java Security Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

3.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Part 2. Under the Hood. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Chapter 4. The Java Virtual Machine. . . . . . . . . . . . . . . . . . . . . . . . . . 109

4.1 The Java Virtual Machine, Close Up. . . . . . . . . . . . . . . . . . . . . . . . . 109

4.1.1 The Class Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

4.1.2 The Class File Verifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.1.3 The Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.1.4 The Class Area. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.1.5 The Native Method Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

4.1.6 The Security Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

4.1.7 The Execution Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

4.1.8 Just-in-Time Compilers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

4.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Chapter 5. Class Files in Java 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5.1 The Traditional Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . 117

5.2 The Java Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . 119

5.3 The Java 2 Class File Format. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

5.3.1 Decompilation Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

5.4 The Constant Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

5.4.1 Beating the Decompilation Threat. . . . . . . . . . . . . . . . . . . . . . . 134

ix

5.5 Java Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

5.5.1 A Bytecode Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

Chapter 6. The Class Loader and Class File Verifier . . . . . . . . . . . . . 145

6.1 Class Loaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

6.1.1 Loading Classes from Trusted Sources . . . . . . . . . . . . . . . . . . 146

6.1.2 Loading Classes from Untrusted Sources . . . . . . . . . . . . . . . . . 147

6.1.3 Beyond What the JVM Provides . . . . . . . . . . . . . . . . . . . . . . . . 148

6.1.4 The Class Loading Process . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

6.1.5 Should You Build Your Own Class Loader . . . . . . . . . . . . . . . . 155

6.2 The Class File Verifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

6.2.1 An Example of Class File Verification . . . . . . . . . . . . . . . . . . . . 169

6.2.2 The Duties of the Class File Verifier . . . . . . . . . . . . . . . . . . . . . 175

6.2.3 The Four Passes of the Class File Verifier. . . . . . . . . . . . . . . . 176

6.3 The Bytecode Verifier in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

6.3.1 The Data Flow Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

6.4 An Incompleteness Theorem for Bytecode Verifiers . . . . . . . . . . . . . 183

6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

Chapter 7. The Java 2 SecurityManager . . . . . . . . . . . . . . . . . . . . . . . 187

7.1 What SecurityManager Does . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

7.2 Operation of the Security Manager . . . . . . . . . . . . . . . . . . . . . . . . . . 190

7.2.1 Interdependence of the Three JVM Security Elements . . . . . . . 192

7.3 Attacking the Defenses of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

7.3.1 Types of Attack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

7.3.2 Malicious Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

7.4 Avoiding Security Hazards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

7.4.1 How to Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

7.5 Examples of Security Manager Extensions. . . . . . . . . . . . . . . . . . . . 206

7.5.1 First Example – Overriding checkWrite(). . . . . . . . . . . . . . . . . . 206

7.5.2 Second Example – Overriding checkPermission(). . . . . . . . . . . 211

7.5.3 Third Example – Overriding checkRead() and checkWrite() . . . 218

7.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Chapter 8. Security Configuration Files in the Java 2 SDK . . . . . . . . 225

8.1 A Note on java.home and the JRE Installation Directory. . . . . . . . . . 225

8.2 Keystores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

8.2.1 The Certificates KeyStore File cacerts . . . . . . . . . . . . . . . . . . . 233

8.3 The Security Properties File, java.security . . . . . . . . . . . . . . . . . . . . 234

8.4 Security Policy Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

8.4.1 keystore Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

8.4.2 grant Entries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

8.5 An Example of Security Settings in the Java 2 Platform . . . . . . . . . . 248

8.5.1 The Count Application Source Code . . . . . . . . . . . . . . . . . . . . . 248

x Java 2 Network Security

8.5.2 A Sample Text File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

8.5.3 Compiling the Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

8.5.4 Running the Application without a Security Manager . . . . . . . . 250

8.5.5 Running the Application with the Default Security Manager . . . 250

8.5.6 Policy File Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

8.6 File Read Access to Files in the Code Base URL Directory . . . . . . . 252

8.7 Security Properties and Policy File Protection . . . . . . . . . . . . . . . . . 252

8.8 How to Implement a Policy Server . . . . . . . . . . . . . . . . . . . . . . . . . . 252

Chapter 9. Java 2 SDK Security Tools. . . . . . . . . . . . . . . . . . . . . . . . . 259

9.1 Key and Certificate Management Tool . . . . . . . . . . . . . . . . . . . . . . . 259

9.1.1 keytool Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

9.1.2 Store and Private Key Password . . . . . . . . . . . . . . . . . . . . . . . 261

9.1.3 Commands and Options Associated with keytool . . . . . . . . . . . 262

9.1.4 An Example of keytool Usage. . . . . . . . . . . . . . . . . . . . . . . . . . 269

9.2 Java Archive Tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

9.2.1 Options of the jar Command . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

9.2.2 Running a JAR File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

9.3 JAR Signing and Verification Tool . . . . . . . . . . . . . . . . . . . . . . . . . . 275

9.3.1 jarsigner Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

9.3.2 Observations on the jarsigner Verification Process . . . . . . . . . . 284

9.3.3 Tampering with a Signed JAR File . . . . . . . . . . . . . . . . . . . . . . 286

9.4 Policy File Creation and Management Tool . . . . . . . . . . . . . . . . . . . 288

9.4.1 Observations on the Use of the Policy Tool . . . . . . . . . . . . . . . 295

Chapter 10. Security APIs in Java 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 297

10.1 The Package java.security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

10.1.1 Principals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

10.1.2 Guard Interface and GuardedObject Class . . . . . . . . . . . . . . . 298

10.1.3 Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

10.1.4 The Security Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

10.1.5 Access Control APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

10.1.6 Key Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

10.1.7 Message Digests and DIgital Signatures. . . . . . . . . . . . . . . . . 311

10.1.8 Secure Random Number Generation . . . . . . . . . . . . . . . . . . . 316

10.1.9 The SignedObject Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

10.1.10 Permission APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

10.1.11 Code Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

10.1.12 Protection Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

10.1.13 Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

10.1.14 Secure Class Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

10.1.15 Algorithm Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

10.2 The Package java.security.spec . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

xi

10.3 The Package java.security.cert. . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

10.4 Package java.security.interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 324

10.5 The Package java.security.acl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

10.6 Examples Using the Java 2 Security APIs . . . . . . . . . . . . . . . . . . . 325

10.6.1 Signature and Signature Verification. . . . . . . . . . . . . . . . . . . . 325

10.6.2 Using Keystores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

10.7 The Permission Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

10.7.1 How to Create New Permissions. . . . . . . . . . . . . . . . . . . . . . . 344

10.7.2 Working with Signed Permissions . . . . . . . . . . . . . . . . . . . . . . 348

10.8 How to Write Privileged Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

10.8.1 First Case – No Return Value, No Exception Thrown . . . . . . . 351

10.8.2 Second Case – Return Value, No Exception Thrown . . . . . . . 352

10.8.3 Third Case – Return Value, Exception Thrown . . . . . . . . . . . . 353

10.8.4 Accessing Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

10.8.5 An Example of Privileged Blocks Usage . . . . . . . . . . . . . . . . . 354

10.8.6 General Recommendations on Using the Privileged Blocks . . 358

Chapter 11. The Java Plug-In. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

11.1 Main Features of Java Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

11.2 What Does the Java Plug-In Do? . . . . . . . . . . . . . . . . . . . . . . . . . . 364

11.3 Java Plug-In HTML Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

11.3.1 Changes Supported by Navigator . . . . . . . . . . . . . . . . . . . . . . 364

11.3.2 Changes Supported by Internet Explorer . . . . . . . . . . . . . . . . 365

11.3.3 Changes Supported by Both Navigator and Internet Explorer . 366

11.3.4 All the Web Browsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

11.3.5 Java Plug-in Software HTML Converter . . . . . . . . . . . . . . . . . 369

11.4 Java Plug-In Control Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

11.4.1 The Basic Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

11.4.2 The Advanced Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

11.4.3 The Proxies Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

11.5 Java Plug-In Security Scenario. . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

11.5.1 First Step – Without Using the Java Plug-in . . . . . . . . . . . . . . 374

11.5.2 Second Step – Using the Java Plug-in . . . . . . . . . . . . . . . . . . 377

Chapter 12. Java Gets Out of Its Box . . . . . . . . . . . . . . . . . . . . . . . . . 385

12.1 JAR Files and Applet Signing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

12.1.1 Manifest File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

12.1.2 Signature File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

12.1.3 Signature Block File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

12.2 Signed Code Scenario in JDK 1.1 and Sun HotJava. . . . . . . . . . . . 393

12.2.1 Creating the CA Key Database . . . . . . . . . . . . . . . . . . . . . . . . 393

12.2.2 Creating the Server Key Database . . . . . . . . . . . . . . . . . . . . . 395

12.2.3 Creating and Signing a JAR File . . . . . . . . . . . . . . . . . . . . . . . 397

xii Java 2 Network Security

12.2.4 Running the Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

12.2.5 Creating the Client Key Database. . . . . . . . . . . . . . . . . . . . . . 399

12.3 Signed Code Scenario in Java 2 SDK, Standard Edition, V1.2 . . . . 400

12.3.1 Creating a Keystore for Certification Authorities . . . . . . . . . . . 401

12.3.2 Creating the Server Certificate . . . . . . . . . . . . . . . . . . . . . . . . 402

12.3.3 Creating and Signing a JAR file . . . . . . . . . . . . . . . . . . . . . . . 406

12.3.4 Granting the Permissions and Running the Applet . . . . . . . . . 407

12.4 Signed Code Scenario in Netscape Communicator. . . . . . . . . . . . . 409

12.4.1 Using the netscape.security Package . . . . . . . . . . . . . . . . . . . 410

12.4.2 Installing Keys and Certificates in Netscape Communicator . . 415

12.4.3 Signing JAR Files with Netscape Signing Tool . . . . . . . . . . . . 418

12.5 Signed Code Scenario in Microsoft Internet Explorer . . . . . . . . . . . 437

12.5.1 First Example with Signed CAB Files . . . . . . . . . . . . . . . . . . . 438

12.5.2 A More Complex Signed CAB File Example . . . . . . . . . . . . . . 450

12.6 The JAR Bug – Fixed In Java 2 SDK, Standard Edition, V1.2.1 . . . 461

12.6.1 The Solution in Java 2 SDK, Standard Edition, V1.2.1 . . . . . . 470

12.7 Future Developments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

Part 3. Beyond the Island of Java – Surfing into the Unknown . . . . . . . . . . . . . . . . . 473

Chapter 13. Cryptography in Java 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 475

13.1 Security Questions, Cryptographic Answers . . . . . . . . . . . . . . . . . . 475

13.1.1 Public Key Certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478

13.2 The Java Cryptography Architecture Framework . . . . . . . . . . . . . . 480

13.2.1 JCE and United States Export Considerations . . . . . . . . . . . . 481

13.2.2 Relationship between Java 2 SDK, JCA and JCE APIs. . . . . . 482

13.3 JCA Terms and Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

13.3.1 The Provider Concept in the JCA . . . . . . . . . . . . . . . . . . . . . . 485

13.3.2 Engine Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

13.3.3 Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

13.4 Java Cryptography Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

13.4.1 JCE – Packages and Their Contents . . . . . . . . . . . . . . . . . . . 493

13.4.2 The Cipher Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495

13.4.3 The Cipher Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 495

13.4.4 Secret Key Interfaces and Classes . . . . . . . . . . . . . . . . . . . . . 495

13.4.5 The KeyGenerator Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495

13.4.6 The KeyAgreement Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

13.4.7 The SealedObject Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

13.5 Java Cryptography in Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

13.5.1 First Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

13.5.2 Second Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

13.6 Asymmetric Encryption with the Java 2 SDK and JCE 1.2 . . . . . . . 497

13.6.1 Using Asymmetric Encryption . . . . . . . . . . . . . . . . . . . . . . . . . 497

xiii

13.7 How to Implement Your Own Provider . . . . . . . . . . . . . . . . . . . . . . 497

13.7.1 Write the Service Implementation Code . . . . . . . . . . . . . . . . . 498

13.7.2 Give the Provider a Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

13.7.3 Write a Master Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

13.7.4 Compile the Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

13.7.5 Install and Configure the Provider. . . . . . . . . . . . . . . . . . . . . . 498

13.7.6 Test if the Provider Is Ready . . . . . . . . . . . . . . . . . . . . . . . . . 498

13.7.7 Algorithm Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

13.7.8 Dependencies on Other Algorithms . . . . . . . . . . . . . . . . . . . . 499

13.7.9 Default Initializations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

13.7.10 A Sample Master Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Chapter 14. Enterprise Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

14.1 Browser Add-On Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

14.2 Networked Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

14.2.1 Applying the Java 2 Access Control Mechanisms . . . . . . . . . . 502

14.2.2 Two-Tier Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

14.2.3 Three-Tier Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

14.2.4 Network Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506

14.3 Secure Clients and Network Computers . . . . . . . . . . . . . . . . . . . . . 509

14.4 Server-Side Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

14.4.1 The Cost of Server-Side Java . . . . . . . . . . . . . . . . . . . . . . . . . 511

14.5 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512

14.5.1 Advantages of Servlets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514

14.5.2 Servlets and CGI-BINs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

14.5.3 Java Servlet APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516

14.5.4 Servlet Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

14.5.5 IBM WebSphere Application Server . . . . . . . . . . . . . . . . . . . . 520

14.5.6 A Sample Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

14.5.7 The Current Servlet Security Model . . . . . . . . . . . . . . . . . . . . 530

14.6 Distributed Object Architectures – RMI . . . . . . . . . . . . . . . . . . . . . . 537

14.6.1 Stubs and Skeletons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

14.6.2 RMI Registry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

14.6.3 A Sample RMI Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542

14.6.4 The Security of RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

14.7 Enterprise JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554

Chapter 15. Java and Firewalls – In and Out of the Net . . . . . . . . . . . 557

15.1 What Is a Firewall?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557

15.2 What Does a Firewall Do? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558

15.2.1 Inside a TCP/IP Packet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558

15.2.2 How Can Programs Communicate through a Firewall? . . . . . . 561

15.3 Detailed Example of TCP/IP Protocol . . . . . . . . . . . . . . . . . . . . . . . 562

Tải ngay đi em, còn do dự, trời tối mất!