没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java 安全性
本教程是关于什么方面的?
第 页(共
页)
恐怕没有什么软件工程主题的重要性比应用程序安全性更紧迫了。无论是来自内部或外部的攻
击都会带来巨大损失,某些攻击会使软件公司对造成的损失承担赔偿责任。随着计算机(尤其
是因特网)技术的发展,安全性攻击正在变得越来越成熟和频繁。利用各种最新技术和工具是
应用程序安全性的一个关键;另一个关键是由经过考验的技术(如数据加密、认证和授权)构
筑的牢固的基础。
平台的基本语言和库扩展都提供了用于编写安全应用程序的极佳基础。本教程讨论了密码
术基础知识与如何用 编程语言实现密码术,并提供了样本代码来说明这些概念。
在这个两部分教程的第一部分中,我们讨论库扩展(现在是 库的一部分)中的内容,
这些库扩展被称为 密码术扩展()和 安全套
接字扩展()。此外,本教程还介绍了
!,这是 中新增加的特性。在本教程第二部分(请参阅参考资料)中,我们将把讨
论范围扩大到由 平台中 认证和授权服务( "
# )管理的访问控制。
我应该学习本教程吗?
第 $页(共
页)
这是一篇中级教程;它假设您知道如何阅读和编写基本的 程序,包括应用程序和
%。
如果您已经是 程序员并且对密码术(关于诸如私钥和公钥加密、& 、'、证书之类
的主题)以及支持它们的 库(、)感到好奇,那么本教程就是为您准备的。本
教程不要求您已经具有任何密码术、或 等方面的知识背景。
本教程介绍了基本密码构件概念。每个概念都附有 实现考虑事项、代码示例和示例执行
的结果。
工具、代码样本和安装需求
第 (页(共
页)
您将需要以下几项以完成本教程中的编程练习:
,标准版
本教程源代码和类,以便您能够随着我们的进度理解示例
用于 & 示例的 )% 库
支持 插件的浏览器
您可以使用 (,但必须自行安装 和 。
关于代码示例的说明
第 页(共
页)
代码示例直接将已加密的数据显示到屏幕上。大多数情况下,这会产生奇形怪状的控制字符,
其中的一些偶尔可能会引起屏幕格式化问题。这不是良好的编程实践(将它们转换成可显示的
!!字符或十进制表示会更好),但我们这样做是为了保持代码示例及其输出的简洁。
在示例执行章节的大多数情况下,我们修改了实际字符串以便与本教程中的字符集需求兼容。
还有,我们在大多数示例中查询和显示了用于给定算法的实际安全性提供程序库。这样做是为
了让用户更好地了解哪个功能是调用哪个库实现的。为什么这样做呢?因为,在大多数安装中
都安装了许多这样的提供程序。
关于作者
第 页(共
页)
)"&*是 )"&*+ !的负责人,该公司是一家专门从事无线网络
和 应用程序安全性和教育的计算机安全性咨询公司。)"在 !),(位于明尼苏达州的
&)工作了 年,他从 -..的第一个发行版就开始从事其所有方面的硬件和软
件开发。他是促使 !),转而支持 平台的关键人物,并且是 !),最大的 应用程序
― 称为 /(现在是 0*的一部分)的商业应用程序框架产品 ― 的首席
架构设计师。他还是 !1数据存储部门的首席技术官,以及该公司研发组织的领导。
)"拥有计算机和电子工程学位,以及威斯康星大学麦迪逊分校计算机科学博士头衔。他目
前在明尼苏达大学教授电子和计算机工程高级设计课程,并将于 $..$年秋季开设和教授该大
学的计算机安全性课程。可通过 )"&*2)"&*1与 )"联系。
Java 安全性编程概念
Java 平台是如何使安全编程更方便的
第 页(共
页)
编程语言和环境有许多特性使安全编程更方便:
无指针,这意味着 程序不能对地址空间中的任意内存位置寻址。
字节码验证器,在编译成 %文件之后运行,在执行之前检查安全性问题。例如,
访问超出数组大小的数组元素的尝试将被拒绝。因为缓冲区溢出攻击是造成大多数系
统漏洞的主要原因,所以这是一种重要的安全性特性。
对资源访问的细颗粒度控制,用于 %和应用程序。例如,可以限制 %对磁
盘空间的读或写,或者可以授权它仅从特定目录读数据。可以根据对代码签名的人
(请参阅代码签名的概念)以及代码来源处的 地址来进行授权。这些设置都出现
在 3%文件中。
大量库函数,这些函数用于主要密码构件和 '(本教程的主题)以及认证和授权
(在本系列的第二篇教程中讨论)。此外,有众多的第三方库可用于额外的算法。
什么是安全编程技术?
第 $页(共
页)
简单地说,有多种编程风格和技术可以帮助确保应用程序更安全。考虑下列两个一般示例:
存储/删除密码。如果密码是存储在 对象中的,则直到对它进行垃圾收
集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于
空闲内存堆中,直到重用该内存空间为止。密码 在内存中驻留得越久,遭到
窃听的危险性就越大。
更糟的是,如果实际内存减少,则操作系统会将这个密码 换页调度到磁盘的
交换空间,因此容易遭受磁盘块窃听攻击。
为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 数组
中,并在使用后对其置零。(是不可变的,所以无法对其置零。)
智能序列化。当为存储器或传输任何私有字段而序列化对象时,缺省情况下,这些对
象都呈现在流中。因此,敏感数据很容易被窃听。可以使用 关键字来标
记属性,这样在流中将忽略该属性。
当在本教程中需要用到这些技术以及其它技术时,我们将更详细地讨论它们。
JDK 1.4 中集成了安全性
第 (页(共
页)
在 之前,许多安全性功能必须作为扩展添加到基本 代码分发版中。严格的美国
出口限制要求这种功能的分离。
现在,新的宽松法规使安全性特性和基本语言更紧密的集成成为可能。下列软件包(在 发
行版之前作为扩展使用)现在集成到了 中:
JCE(密码术扩展)
JSSE(安全套接字扩展)
JAAS(认证和授权服务)
还引入了两种新功能:
JGSS(通用安全性服务 4%)
CertPath API(证书路径 !5 !)
、和 !是本教程讨论的主题。在本系列的下一篇教程中,我们将重点介
绍 。这两篇教程都不讨论 4(它提供一般框架以在两个应用程序之间安全地交换消
息)。
第三方库充实了安全性
第 页(共
页)
我们可以用第三方库(也称为
提供程序
)来增强当前 语言中已经很丰富的功能集。提供
程序添加了额外的安全性算法。
作为库示例,我们将使用 )%提供程序(请参阅参考资料)。)%库
提供了其它密码算法,包括本教程什么是公钥密码术?和什么是数字签名?中讨论的流行的
& 算法。
尽管您的目录名和 java.security文件可能有一点不同,但仍可用以下模板安装 )
%提供程序。要安装这个库,请下载 *63"6$3文件并将它放到
3$".737%*7和 1/%77$.7%*7目录中。在两个
3文件(他们位于上述相同的目录下,但位于“8子目录而不是“8)中,
将下面的行:
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
添加至这些行的末尾:
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
展望
第 页(共
页)
剩余34页未读,继续阅读
资源评论
cailibin
- 粉丝: 4
- 资源: 7018
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功