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