授权组件。
要确定授权,可以向 Java 2 Security Manager
提供 Subject
及其 Principal s,
以及 Subject 要执行的特权操作(读/写到文件系统、数据库访问,等等)。Security
Manager
会咨询与 Principal s
和权限相关联的策略文件。 如果一个 Subject 的
Principal s
具有执行指定操作的权限,那么就对这个 Subject 授权并允许操作,否则就
会拒绝这项操作并抛出一个 SecurityException 。
用 JSSE 进行安全传输
有了 JAAS ,我们就可以识别访问系统的用户并限制他们只能访问授权使用的那部
分系统。虽然 JAAS
是迈向安全 Web 应用程序坚实的第一步,但是如果没有安全传输,
那么应用程序安全性仍然是不完整的。
这里,我们仍然是以明文形式――即 HTTP、TCP/IP、FTP 等――传递安全信息(包括
认证信息)。所以我们需要保证数据在传输时不会被未授权的人访问。我们还需要保证数据
在到达之前,没有在传输过程中修改过,不管这种修改是有意的还是无意的。我们可以利
用安全套接字层(SSL)和传输层安全性(Transport Layer Security,TLS)协议实现这两
种功能。
SSL
和 TLS
不是特定于 Java 的协议,它们是为维护通过套接字的数据的完整性和
私密性而设计的网络层协议。Java 安全套接字扩展(JSSE)
利用 SSL/TLS 可以进行安全的
Internet
通信,它提供了一个具有完整功能的应用程序框架――一个 Java
版本的 SSL
和 TLS
协议,这些功能包括数据加密、服务器认证、消息完整性,等等。使用 JSSE,我们
可以定义运行任意应用程序协议――包括 HTTP、TCP/IP、FTP
,甚至 Telnet――的客户
机与服务器之间的安全套接字连接。从数据加密的角度看,JSSE
结合了许多与 JCE 中使
用的同样的概念和算法。不过更重要的是,在简单流套接字 API 背后,它会在必要时自
动使用它们。
要利用 JSSE API
,我们只需要做简单的几件事。首先我们需要获得 JSSE 提供程序。
其次,我们需要从一个 JSSE
套接字工厂而不是直接从 java.net.Socket 类获得套接字。
客 户 端 代 码 从
SSLSocketFactory 获 取 套 接 字 , 而 服 务 器 端 代 码 从
SSLServerSocketFactory 获取套接字。通过从这些工厂获取套接字,我们就可以利用
JSSE
提供程序提供的框架,而不是像 java.net 包允许我们所作的那样,简单地创建标
准的、不安全的套接字。
结束语
Java
平台以其岩石般坚固的安全性闻名。每一年 Java 安全性框架都会变得更灵活和
更健壮,JAAS
和 JSSE 的加入表明这个传统将会继续发扬光大。
JAAS 提供了对用户进行认证和控制访问资源的模块化机制。JSSE
提供了 SSL 和
TSL
协议的 Java 实现以支持数据完整性和私密性。