JCA简介
Java平台强调安全性,包括语言安全性、密码学、公钥基础设施、身份验证、安全通信和访问控制。
JCA是java平台的重要部分,它包含了“provider”架构和一系列数字签名、消息摘要、证书和证书认证、加密(对称/非对称 流式/分组 加密),秘钥生成和管理、安全随机数生成API。这些API是的开发者可以十分简单的把安全集成到应用代码中。JCA架构设计上遵循如下准则:
实现独立: 应用程序不必自己实现安全算法,但是它们可以从java平台获取安全服务。安全服务是在providers (参考Cryptographic Service Providers)中以可插拔的方式实现的。应用程序可能依赖多个独立的providers 来实现安全功能。
实现互操作性: provider是跨应用程序互操作的。具体来说,应用程序不绑定到特定的provider,provider也不绑定到特定的应用程序。
算法可扩展性 Java平台包括许多内置的providers,它们实现了一组基本的安全服务,这些服务在今天被广泛使用。然而,有些应用程序可能依赖于尚未实现的新标准或专有服务。java平台支持安装定制的provider来扩展内置的providers。
JCA设计原则
JCA是围绕以下原则设计的
实现独立性和互操作性
算法独立性和可扩展性
实现独立性和算法独立性是互补的;您可以使用加密服务,比如数字签名和消息摘要,而不用担心实现细节,甚至不用担心构成这些概念基础的算法。虽然不可能完全独立于算法,但是JCA提供了标准化的、特定于算法的api。当不需要实现独立性时,JCA允许开发人员指定特定的实现。
算法独立性是通过定义加密“引擎”(服务)类型和定义提供这些加密引擎功能的类来实现的。这些类称为引擎类,比如MessageDigest, Signature, KeyFactory, KeyPairGenerator, and Cipher
实现独立性是通过使用基于“provider”的体系结构来实现的。实现独立性是通过使用基于“提供者”的体系结构来实现的。加密服务提供者(CSP)与“provider”是两个等价的术语,(请参阅加Cryptographic Service Providers
)指实现一个或多个加密服务的包或一系列包,如数字签名算法、消息摘要算法和密钥转换服务。程序可以简单地请求实现特定服务(如DSA签名算法)的特定类型的对象(如签名对象),并从安装的providers实现中选择一个。
实现互操作性意味着各种实现可以相互协作、使用彼此的密钥或验证彼此的签名。例如,对于相同的算法,一个provider生成的密钥可以被另一个provider使用,一个provider生成的签名可以被另一个provider验证。
算法的可扩展性意味着可以很容易地添加适合支持引擎类的新算法。
Provider架构
Providers包含一