第一部分 Java安全基础 2
第1章 安全性基础 2
1.1 基本安全模型 2
1.2 加密 3
1.2.1 加密类 3
1.2.2 消息摘要 5
1.2.3 对称密钥 5
1.2.4 非对称密钥 5
1.3 验证与非否认 6
1.3.1 验证类型 6
1.3.2 非否认 8
1.4 访问控制 8
1.4.1 自由选择访问控制 9
1.4.2 基于角色的访问控制 9
1.4.3 强制访问控制 9
1.4.4 防火墙访问控制 9
1.5 域 9
1.6 审计 10
1.7 策略与管理 10
1.8 小结 11
第2章 Java安全概述 12
2.1 Java安全历史 12
2.2 Java安全体系结构 14
2.2.1 Java 2安全体系结构的核心 14
2.2.2 Java加密体系结构 15
2.2.3 Java加密扩展 15
2.2.4 Java安全套接扩展 16
2.2.5 Java验证与授权服务 16
2.3 字节码验证器 16
2.4 类装入器 17
2.4.1 类装入器体系结构与安全性 17
2.4.2 类装入器接口 18
2.5 安全管理器 21
2.5.1 安全管理器接口 21
2.5.2 定制安全管理器 22
2.6 Java加密体系结构 24
2.6.1 JCA体系结构 24
2.6.2 加密引擎 25
2.6.3 加密服务提供者 27
2.7 小结 28
第3章 Java应用程序安全访问控制 29
3.1 权限 29
3.1.1 权限体系结构 29
3.1.2 权限类型 30
3.1.3 定制权限类型 34
3.2 安全策略 35
3.2.1 安全策略文件格式 35
3.2.2 在策略文件中引用属性 36
3.2.3 使用安全策略文件 36
3.2.4 安全策略工具 37
3.2.5 安全策略API 38
3.3 Java访问控制 38
3.3.1 访问控制体系结构 39
3.3.2 保护对象 41
3.3.3 SecurityManager访问控制映射 42
3.3.4 微调与可配置访问控制举例 45
3.4 小结 47
第4章 小程序安全性 48
4.1 扩展沙袋 48
4.1.1 JDK 1.0沙袋 48
4.1.2 JDK 1.1沙袋 50
4.1.3 JDK 1.2最低权限 51
4.2 指定小程序安全策略 51
4.2.1 安全策略文件内容 52
4.2.2 提供项目语法 52
4.3 使用签名小程序 53
4.3.1 生成JAR文件 53
4.3.2 签名JAR文件 54
4.3.3 指定签名小程序策略 54
4.4 取得签名证书 55
4.5 使用不同的浏览器 55
4.6 小结 55
第二部分 加密安全 58
第5章 加密简介 58
5.1 密写简史 58
5.2 加密技术与密码分析 60
5.3 密码 60
5.3.1 凯撒密码 60
5.3.2 简单替换密码 65
5.4 秘密密钥加密 77
5.4.1 数据加密标准 77
5.4.2 DESede 90
5.4.3 Blowfish 90
5.4.4 Rivest密码 94
5.5 公开密钥加密法 94
5.5.1 Rivest、Shamir、Adleman(RSA)算法 95
5.5.2 EIGamal算法 97
5.6 消息摘要 98
5.6.1 MD5 99
5.6.2 SHA-1 101
5.6.3 Base 64编码 102
5.7 数字签名 110
5.7.1 数字签名算法 111
5.8 数字证书 111
5.9 小结 113
第6章 密钥管理与数字证书 114
6.1 密钥管理的重要性 114
6.2 密钥表示 115
6.3 密钥产生 116
6.3.1 KeyPairGenerator类 116
6.3.2 KeyGenerator类 117
6.3.3 KeyGeneratorApp程序 118
6.3.4 安全随机数与密钥生成 121
6.3.5 密钥转换 123
6.4 密钥协商 125
6.4.1 Internet简单密钥管理协议 127
6.4.2 密钥协商的JCE支持 127
6.5 密钥存储与基于口令加密 132
6.6 JDK 1.1与JDK 1.2密钥管理的差别 141
6.6.1 JDK 1.1密钥管理 141
6.6.2 JDK 1.2密钥管理 142
6.7 keytool 145
6.8 小结 146
第7章 消息摘要与数字签名 147
7.1 消息摘要类与接口 147
7.1.1 MessageDigestSpi 147
7.1.2 MessageDigest 148
7.1.3 DigestInputStream与DigestOutputStream 150
7.1.4 使用摘要流 152
7.1.5 DigestException 153
7.2 消息验证代码 153
7.2.1 MacSpi 154
7.2.2 Mac 155
7.2.3 MAC操作 156
7.3 签名类与接口 157
7.3.1 SignatureSpi 157
7.3.2 Signature 157
7.3.3 SignedObject 161
7.3.4 Signer 163
7.3.5 SignatureException 163
7.4 小结 164
第8章 Java加密扩展 165
8.1 JCE内幕 165
8.2 Cryptix JCE 166
8.3 安全提供者与算法独立性 167
8.4 如何组织安全提供者 167
8.4.1 引擎类 167
8.4.2 SPI类 168
8.4.3 提供者类 168
8.5 生成新提供者 168
8.5.1 扩展SPI类 169
8.5.2 扩展Provider类 171
8.5.3 安装Provider类 172
8.6 使用提供者 172
8.7 小结 174
第9章 SSL与JSSE 175
9.1 SSI概述 175
9.2 Java安全套接扩展概述 176
9.2.1 JSSE包与类概述 177
9.3 JSSE提供者 178
9.4 JSSE SSL服务器套接 179
9.4.1 取得SSL服务器套接工厂 179
9.4.2 生成SSL服务器套接 182
9.4.3 SSL服务器套接听取 183
9.4.4 客户机验证 184
9.5 JSSE SSL客户机套接 185
9.5.1 取得SSL套接工厂 185
9.5.2 生成SSL客户机套接 185
9.6 JSSE SSL对话 186
9.7 小结 187
第三部分 分布式系统安全 190
第10章 分布式企业安全概述 190
10.1 分布式企业系统技术 190
10.1.1 企业数据库连接 191
10.1.2 企业通信 191
10.1.3 企业通信服务 192
10.1.4 基于容器的企业组件 192
10.2 企业数据库连接安全性 193
10.3 企业通信安全 193
10.3.1 基本网络安全 194
10.3.2 RMI安全性 195
10.3.3 CORBA安全性 196
10.4 企业通信服务安全 196
10.4.1 JNDI安全 196
10.4.2 Jini安全性 197
10.4.3 JMS安全性 198
10.4.4 JavaMail安全性 199
10.5 基于容器的企业组件安全性 199
10.5.1 Web组件安全 199
10.5.2 EJB安全性 200
10.6 小结 200
第11章 数据库与数据库安全 201
11.1 何谓数据库 201
11.2 关系型数据库 201
11.2.1 使用关键字 202
11.3 结构化查询语言 202
11.4 远程数据库访问 202
11.4.1 CDBC与JDBC驱动器 203
11.5 用java.sql包连接数据库 205
11.5.1 建立数据库连接 205
11.5.2 执行SQL语句 206
11.5.3 StatementApp程序 207
11.6 数据库安全问题 211
11.6.1 保护数据库连接 212
11.6.2 保护用户连接 217
11.6.3 审计 220
11.6.4 数据库扫描 221
11.7 小结 221
第12章 Java验证与授权服务 222
12.1 JAAS概述 222
12.2 JAAS主题 223
12.2.1 主题关系 223
12.2.2 生成主题 224
12.2.3 操纵主题属性 225
12.2.4 专门主题证书 226
12.3 用JAAS验证 227
12.3.1 登录模块配置与初始化 228
12.3.2 验证过程 231
12.3.3 回拨处理 233
12.4 用JAAS授权 236
12.4.1 JAAS安全策略文件格式 236
12.4.2 使用JAAS安全策略文件 237
12.4.3 进行安全关键操作 238
12.4.4 JAAS安全授权抽象 239
12.4.5 标准Java安全策略与JAAS权限 241
12.5 小结 242
第13章 CORBA安全性 243
13.1 CORBA Security概述 243
13.1.1 CORBA Security包 244
13.1.2 CORBA安全体系结构 245
13.1.3 核心CORBA Security接口 246
13.2 验证 249
13.3 代理 253
13.4 授权 254
13.5 审计 256
13.6 非否认 257
13.7 加密 260
13.8 安全策略 261
13.9 安全管理 263
13.10 小结 263
第14章 企业JavaBeans安全 264
14.1 EJB安全概述 264
14.2 标准编程EJB访问控制 265
14.3 标准声明性EJB访问控制 268
14.4 厂家特定EJB访问控制 273
14.5 厂家特定EJB标识与验证 274
14.6 EJB安全通信、代理与审计 277
14.6.1 EJB连接安全性 277
14.6.2 EJB主体代理 277
14.6.3 EJB安全审计 277
14.7 小结 278
第15章 JSP与Java servlet安全 279
15.1 公用网关接口 279
15.1.1 Web服务器与CGI程序通信 279
15.1.2 CGI程序——Web服务器通信 279
15.2 对话状态维护 280
15.2.1 cookie 280
15.2.2 URL改写 281
15.2.3 隐藏窗体字段 281
15.3 服务器方编程安全问题 281
15.3.1 截获对话状态信息 281
15.3.2 伪造对话状态信息 282
15.3.3 缓冲区溢出 282
15.3.4 数据验证 282
15.3.5 页面序列化 282
15.3.6 对话超时 283
15.3.7 信息报表 283
15.3.8 浏览器残余 283
15.3.9 用户验证 283
15.3.10 登记敏感信息 284
15.3.11 最低权限 284
15.4 Java servlet 284
15.4.1 为什么使用servlet 284
15.4.2 Servlet API 285
15.4.3 servlet如何工作 288
15.4.4 servlet举例 298
15.4.5 servlet安全性 301
15.5 JavaServer Pages 307
15.6 小结 307
第四部分 附录 310
附录A Java安全缺陷 310
附录B RSA算法 316
附录C 下载与安装JCE 325
附录D Java 2 Security API 327
附录E 下载与安装Cryptix JCE 1.2 342
附录F 使用Keytool 346
附录G 使用jarsigner工具 361