Java安全性编程实例(书籍及源代码)

Java安全性编程实例
目    录
第1章运行环境设置	1
1.1 J2SE的安装和设置	1
1.1.1下载J2SE	1
1.1.2安装J2SE	1
1.1.3设置J2SE	3
2.1.4 J2SE的主要工具	4
1.2反编译器的安装	5
1.3 混淆器的安装	7
第2章数据内容的保护—— 加密和解密	8
2.1一个简单的加密和解密程序——凯撒密码	8
2.2对称密钥的生成和保存	10
2.2.1对称密钥的生成及以对象序列化方式保存	11
2.2.2以字节保存对称密钥	12
2.3使用对称密钥进行加密和解密	14
2.3.1使用对称密钥进行加密	14
2.3.2使用对称密钥进行解密	17
2.4基于口令的加密和解密	19
2.4.1基于口令的加密	19
2.4.2基于口令的解密	22
2.5针对流的加密和解密	25
2.5.1针对输入流的解密和解密	25
2.5.2针对输出流的解密和解密	27
2.6加密方式的设定	30
2.6.1使用CBC方式的加密	30
2.6.2使用CBC方式的解密	33
2.7 生成非对称加密的公钥和私钥	35
2.8 使用RSA算法进行加密和解密	37
2.8.1使用RSA公钥进行加密	37
2.8.2使用RSA私钥进行解密	40
2.9 使用密钥协定创建共享密钥	42
2.9.1创建DH公钥和私钥	43
2.9.2创建共享密钥	46
第3章Java源代码和类、变量 及方法的保护	50
3.1 Java反编译及混淆器的使用	50
3.2从网络资源加载节码文件	55
3.3以任意方式加载字节码文件	60
3.4 加载加密的字节码文件	62
3.5 加载当前目录下的加密字节码文件	65
3.6 Java类、成员变量和方法的保护	69
3.6.1类的保护	69
3.6.2成员变量和方法的保护	73
3.6.3使用校验器	75
3.6.4 Reference类型私有成员变量的保护	77
3.6.5 保护常量	80
第4章 数据完整性和所有者的确认——消息摘要和签名	83
4.1使用消息摘要验证数据未被篡改	83
4.1.1计算消息摘要	84
4.1.2基于输入流的消息摘要	85
4.1.3输入流中指定内容的消息摘要	87
4.1.4基于输入流的消息摘要	89
4.2使用消息验证码	91
4.3使用数字签名确定数据的来源	93
4.3.1使用私钥进行数字签名	94
4.3.2使用公钥验证数字签名	96
4.4 使用消息摘要保存口令	98
4.4.1 使用消息摘要保存口令	99
4.4.2 使用消息摘要验证口令	100
4.4.3 攻击消息摘要保存的口令	102
4.4.4 使用加盐技术防范字典式攻击	105
4.4.5 验证加盐的口令	108
第5章 数字化身份的确定     ——数字证书	112
5.1数字证书的创建	112
5.1.1 使用默认的密钥库和算法创建数字证书	112
5.1.2 使用别名	114
5.1.3 使用指定的算法和密钥库和有效期	115
5.1.4 使用非交互模式	116
5.2数字证书的显示	117
5.2.1 使用Keytool直接从密钥库显示条目信息	117
5.2.2 使用Keytool直接从密钥库显示证书详细信息	118
5.2.3 使用Keytool将数字证书导出到文件	119
5.2.4 使用Keytool从文件中显示证书	120
5.2.5 在Windows中从文件显示证书	121
5.2.6 Java程序从证书文件读取证书	122
5.2.7 Java程序从密钥库直接读取证书	124
5.2.8 Java程序显示证书指定信息(全名/公钥/签名等)	126
5.3密钥库的维护	129
5.3.1使用Keytool删除指定条目	129
5.3.2使用Keytool修改指定条目的口令	130
5.3.3 Java程序列出密钥库所有条目	131
5.3.4 Java程序修改密钥库口令	132
5.3.5 Java程序修改密钥库条目的口令及添加条目	134
5.3.6 Java程序检验别名及删除条目	136
5.4数字证书的签发	137
5.4.1 确定CA的权威性——安装CA的证书	137
5.4.2 验证CA的权威性——显示CA的证书	141
5.4.3 Java程序签发数字证书	142
5.4.4 数字证书签名后的发布	148
5.5数字证书的检验	150
5.5.1 Java程序验证数字证书的有效期	150
5.5.2 使用Windows查看证书路径验证证书的签名	152
5.5.3 Windows中卸载证书	153
5.5.4 Java程序使用CA公钥验证已签名的证书	157
第6章 数字化身份            ——CertPath证书链	160
6.1密钥库中创建并保存证书链的几种方法	160
6.1.1 使用Keytool将已签名的数字证书导入密钥库	160
6.1.2 使用Java程序将已签名的数字证书导入密钥库	164
6.2 几种获取CertPath证书链的方法	166
6.2.1 根据证书文件生成CertPath类型的对象	167
6.2.2 从密钥库读取证书链生成CertPath类型的对象	169
6.2.3 从HTTPS服务器获取证书链	171
6.3 CertPath对象的证书显示和保存	178
6.3.1 显示CertPath中的证书	178
6.3.2 保存CertPath中的证书	180
6.4 验证CertPath证书链	182
6.4.1 验证主体和签发者	183
6.4.2 验证签名	185
6.4.3 CertPathValidator类基于TrustAnchor验证证书链	187
6.4.4 CertPathValidator类基于密钥库验证证书链	191
6.5 使用CertStore对象保存和提取证书	195
6.5.1创建CertStore对象	195
6.5.2定义证书的选择标准	199
6.5.3从CertStore中提取证书	202
6.6 证书的吊销	204
6.6.1查看证书吊销清单常规信息	204
6.6.2查看清单中被吊销的证书	210
6.6.3从CertStore对象中提取已吊销的证书	212
第7章 数据的安全传输和身份验证 ——SSL和HTTPS编程	217
7.1 最简单的SSL通信	217
7.1.1 最简单的SSL服务器	217
7.1.2 最简单的SSL客户程序	219
7.1.3 进一步设置信任关系	222
7.1.4 设置默认信任密钥库	223
7.1.5 通过KeyStore对象选择密钥库	226
7.2 进一步的SSL客户和服务器程序的例子	228
7.2.1 设计通信规则	228
7.2.2 查看对方的证书等连接信息	233
7.3 HTTPS客户及服务器程序	237
7.3.1 最简单的HTTPS服务器程序	237
7.3.2 最简单的HTTPS客户程序	244
7.3.3 基于Socket的HTTPS客户程序	247
7.3.4 传输实际文件	249
7.4基于证书的客户身份验证	253
7.4.1 最简单的验证客户身份的HTTPS服务器程序	253
7.4.2 编写客户程序连结需客户验证的HTTPS服务器	256
第8章 程序运行的安全性 ——基于代码来源的授权	258
8.1 安全管理器的使用	258
8.1.1使用默认的安全管理器限制应用程序	258
8.1.2编写自己的安全管理器	261
8.1.3在程序中设置安全管理器	264
8.2使用策略文件基于代码位置进行授权	265
8.2.1允许所有代码具有所有权限	265
8.2.2允许所有代码具有特定的权限	270
8.2.3许所有代码具有多种不同权限	272
8.2.4针对指定目录中的代码的授权	274
8.2.5针对从网络下载的代码的授权	279
8.3使用策略文件基于代码的所有者进行授权	283
8.3.1编程者对代码进行签名	283
8.3.2用户检验已签名的代码	284
8.3.3针对签名者进行授权	286
8.4定义特权代码	289
8.4.1 不同代码之间的调用和授权	289
8.4.2 使用doPrivileged( )方法定义特权代码	294
8.4.3 使用匿名类定义特权代码	298
8.5权限的操作及定义自己的权限	302
8.5.1 策略文件权限的检测	303
8.5.2 最简单的权限定义	306
8.5.3 使用签名的权限	310
8.6 Applet的安全运行	312
8.6.1 使用AppletViewer运行的Java Applet	312
8.6.2 浏览器中使用Java Plug-in运行Java Applet	315
8.6.3 浏览器基于策略文件运行Java Applet	321
8.6.4 浏览器运行RSA签名的Java Applet	323
8.6.5 Java Plug-in的证书管理	328
8.6.6 使用usePolicy权限加强RSA签名Applet的安全控制	330
第9章 程序运行的安全性—— 基于用户身份的验证和授权(JAAS)	333
9.1 最简单的身份验证	333
9.1.1最简单的登录	333
9.1.2更换登录模块修改验证方式	337
9.1.3更换回调处理器修改登录界面	339
9.1.4使用非交互式验证	340
9.2编写自己的登录模块	343
9.2.1简单的登录模块	343
9.2.2完整的登录模块模板	351
9.2.3使用模板编写自己的密钥库登录模块	359
9.3使用堆叠式登录	367
9.3.1堆叠式登录及各个登录模块的相互关系	367
9.3.2堆叠登录模块之间的信息共享	371
9.4编写自己的回调处理器	387
9.4.1最简单的回调处理器	387
9.4.2 图形界面口令输入的安全性	393
9.4.3文本界面口令输入的安全性	395
9.4.4 更加安全的文本界面口令输入方式	397
9.5基于身份的授权	400
9.5.1使用策略文件的基于身份授权	400
9.5.2使用编程方式的基于身份授权	406
9.5.3 比较doAsPrivileged( )和doAs( )	410


本书共分9章,主要内容如下: 
第一章
解决的主要问题
    运行本书的程序需要哪些软件?
主要内容
介绍本书所使用的主要软件及其安装和配置
第二章
解决的主要问题——内容的安全性
    数据在网上传递怎么样防止被黑客窃取听到?
    硬盘上的文件中有敏感数据,如何防止被黑客看到?
主要内容
本章解决的是数据内容的安全性,介绍Java的加密和解密技术。学完该章可以通过Java编程对各种数据进行各种形式的加密。密码学也是安全机制的基础。
第三章
解决的主要问题——和源代码相关的安全性
编写好的程序给用户后,用户如果能反编译出源代码怎么办?
定义类、成员变量、方法时如何防止恶意或无意的攻击?
主要内容
本章解决的是和源代码相关的保护。包括源代码、类、成员变量、方法的保护。通过常用的反编译工具加强对源代码保护的认识,使用混淆器和加密等方式对源代码作了初步保护。同时演示了编写程序时如何考虑攻击者对类、成员变量、方法等方面的攻击。
第四章
解决的主要问题——确定数据的完整性和所有者
网上下载了一个程序,如何确定它确实是某某公司开发的?
如何确定黑客没有将程序修改过?
某公司或人发来一个文件,后来他不承认发过这个文件怎么办?
主要内容
第四章起开始介绍和身份认证相关的技术。包括身份确定性、不可篡改性、不可否认性等,该章介绍的消息摘要和签名技术可解决这些问题。
第五章、第六章
解决的主要问题——数字化身份的凭证
   实际应用中如何方便地使用摘要和签名技术?
   如何确定某个签名确实是某个人或机构的?
主要内容
第五章和第六章介绍基于摘要和签名技术的数字证书。这是Java安全中确定身份的主要技术。其中第五章介绍了数字证书的创建、签发、验证和维护等,第六章介绍了多个证书组成的证书链(CertPath)的创建和验证。
第七章
解决的主要问题——数据安全传输,服务器和用户身份的确定
    客户机和服务器之间的通信如何自动进行加密传输?
    客户机和服务器之间的通信如何相互确定身份?
    浏览器访问一个站点,如何确定这个站点不是黑客的服务器?
主要内容
本章介绍介绍使用加密技术和证书机制的一个实际应用,基于SSL和HTTPS的编程。学完本章可以编写自己的SSL和HTTPS客户及服务器程序。
第八章
解决的主要问题——基于代码来源的程序的安全运行
网上下载了一个程序,运行时会不会删除我的文件,或将某些文件泄漏给黑客?
编写了一个Java Applet,如何让其能访问硬盘上的文件?
主要内容
本章介绍基于代码来源的程序的安全运行,可以基于运行时代码在哪个URL、或代码是谁签名的限制其可以访问哪些用户资源。还介绍了定义自己的权限以及签名Java Applet。
第九章
解决的主要问题——身份验证和基于执行者身份的程序的安全运行
程序需要用户输入账号和口令到数据库登录,但以后可能需要改为智能卡验证。
程序需要访问某个用户资源,但只有用户以某些特殊身份登录时才需要该权限。
主要内容
本章介绍Java验证和授权服务(JAAS),可以方便地更换验证模块,并实现基于身份的授权。

你可能感兴趣的:(java,编程,应用服务器,浏览器,J2SE)