安全性是应用程序开发中最重要的部分之一。Java 语言通过提供许多使应用程序安全的选项和特性,使开发安全应用程序变得容易。因为这是一个很大的话题,所以本文将涉及 Java 平台中可用的安全特性和 API 的几个关键方面。
概述
Java 平台从一开始就在构建时牢记安全性。该语言的类型安全属性和自动垃圾收集表明 Java 架构试图从其核心吸收安全特性。
近年来,安全一直是重点。例如,现代浏览器正在努力限制或减少对 Java、Silverlight 和 Flash 等插件的支持,因为它们可能被滥用以将恶作剧代码合并到一个看起来无害的插件中。尽管 Java 环境很干净,但小程序的本质是它从公共网络下载不受信任的代码。这可能是一个重大的安全漏洞。此外,浏览器世界在过去几年中发生了巨大变化。对 Applet 的绝对需求几乎已经过时。也许这一点以及主要是日益增加的安全问题使得 Applet 从 Java 9 中被弃用。
Java 安全框架
Java 安全服务已经扩展并包括大量应用程序编程接口 (API)、工具、许多安全算法实现、机制和协议。这为开发安全应用程序并相应地管理它们提供了一个综合环境。
Java 安全 API 的范围很广。开发安全应用程序的基础在于加密和公钥基础设施 (PKI) 接口、多种可互操作的通用算法实现以及其他安全服务。有用于执行身份验证和访问控制的接口。这使应用程序能够防止对受保护资源的未经授权的访问。
语言安全
首先,语言本身的构建考虑了将安全性融入其核心。最简单的例子可能是类型安全的结合。类型安全意味着程序在运行时对内存的访问受到限制。这是通过仅将内存与 Java 对象相关联来实现的。对象有一个对应的类来定义它的行为;这确保了程序只能根据定义的行为对其进行操作。这个想法与动态类型检查产生了共鸣,但 Java 也尽可能地结合了复杂的静态类型检查,以克服其动态对应物的限制。例如,字节码验证器是一种有效的静态类型检查器,用于在编译时发现任何类型的错误并主动向开发人员报告。字节码验证器通过符合 Java 语言规范来确保执行合法的字节码。除此之外,它还检查内存违规、堆栈下溢/溢出、正确的类型转换等。除此之外,还有诸如 private、protected 和 public 之类的修饰符来声明受限访问。
安全提供商
这些服务充当安全提供者。它们通过标准接口插入 Java 平台时,使应用程序可以轻松获得安全服务。这种机制的优点是开发人员不必了解复杂的细节,而是可以专注于将安全功能集成到应用程序中。这个想法被封装在名为 java.security.Provider 的抽象类中。安全服务是通过Provider提供的getInstance()方法获得的。可以配置许多提供程序,其中每个提供程序都在安装它的每个运行时中配置了名称和版本号。
密码学
Java 加密 API 分布在两个包中:java.security 和 javax.crypto。Java 通过实现多种加密算法提供了种类繁多的加密服务。其中一些如下:
java.security.MessageDigest:此类提供单向哈希函数的实现,该函数采用任意大小的数据并输出固定长度的哈希值。该算法被命名为 SHA-1 或 SHA-256。
java.security.Signature:此类用于提供数字签名算法的功能,例如 DSA、RSA 或 DSA 算法,使用 SHA-256 消息摘要算法。数字签名特别用于确保数字数据的完整性和真实性。
java.security.SecureRandom:该类提供了生成加密强随机数的功能。
公钥基础设施 (PKI)
PKI 基础设施支持使用公钥加密技术进行数据的安全交换。它包括密钥、证书、公钥加密和数字证书。与 PKI 相关的类存储在 java.security 和 java.security.cert 包中。
验证
身份验证是验证用户身份的过程。Java 使应用程序能够在可插入模块的帮助下执行用户身份验证。javax.security.auth.login 包中有一个名为 LoginContext 的类。此类使用名称和 CallbackHandler 实例化。LoginContext 使用名称作为配置的索引。配置决定了具体的 LoginModule (javax.security.auth.spi.LoginModule)。CallbackHandler 被传递给 LoginModule 以提示输入用户名和密码,例如在 GUI 中。
安全通信
Java 平台实现了 SSL 和 TLS 协议,它们提供了消息完整性、数据加密以及客户端和服务器身份验证的功能。这可用于在 HTTP 或 TCP/IP 协议之上为对等方之间的数据通信铺平安全通道。可以在 javax.net.ssl 包中找到对实现的 API 支持。有许多支持类;例如,SSLSocket 类是 java.net.Socket 类的扩展,用于提供使用 SSL/TLS 协议的安全套接字。这只不过是一个普通的流套接字,在传输层协议 (TCP) 上增加了一层保护。
访问控制
访问控制类保护对敏感资源(例如本地文件)的访问。java.lang.SecurityManager 类调解所有访问。此类允许应用程序实现安全策略。因此,可能会在尝试中限制可能的不安全操作,因此应用程序可以完全控制允许的操作。
结论
这是对 Java 平台安全特性、功能和 API 的快速浏览。Java 为在应用程序中实现安全性提供了全面的支持,开发人员可以很高兴地不知道实现它们所涉及的复杂性,但却从中受益。这利用了产品的快速高效交付,而无需从头开始构建所有内容。
发表评论 取消回复