来自Java官方的文档,作备忘使用。
简介:
Java平台非常强调安全性,包括语言安全,密码学,公钥基础设施,认证,安全通信和访问控制。
JCA是平台的一个主要部分,包含一个“提供者”体系结构和一组用于数字签名,消息摘要(哈希),证书和证书验证,加密(对称/非对称块/流密码),密钥生成管理和安全随机数生成等等。这些API允许开发人员将安全性轻松集成到应用程序代码中。这个架构是围绕以下原则设计的:
实现独立性:应用程序不需要实现安全算法。相反,他们可以从Java平台请求安全服务。安全服务在提供者(见下文)中实现,通过标准接口插入Java平台。应用程序可能依靠多个独立的提供者来提供安全功能。
实现互操作性:提供者可以跨应用程序进行互操作。具体而言,应用程序不绑定到特定的提供者,而提供者也不绑定到特定的应用程序。
算法可扩展性:Java平台包括许多内置的提供者,这些提供者实现了当今广泛使用的一组基本的安全服务。但是,一些应用程序可能依赖尚未实施的新兴标准或专有服务。 Java平台支持安装实现这些服务的定制提供程序。
JDK中提供的其他密码通信库使用JCA提供程序体系结构,但在别处进行了介绍。 Java Secure Socket Extension (JSSE) Java安全套接字扩展(JSSE)提供对 Secure Socket Layer(SSL)和 Transport Layer Security(TLS)实现的访问。 Java通用安全服务(JGSS)(通过Kerberos)API以及简单身份验证和安全层(SASL)也可用于在通信应用程序之间安全地交换消息。
术语注释:
在JDK 1.4之前,JCE是一个非捆绑产品,因此,JCA和JCE被定期称为独立的,独特的组件。由于JCE现在捆绑在JDK中,所以区别变得不那么明显了。由于JCE使用与JCA相同的体系结构,所以JCE应该更适合作为JCA的一部分。
JDK中的JCA包含两个软件组件:
1. 定义和支持提供者为其提供实现的加密服务的框架。这个框架包含了诸如java.security,javax.crypto,javax.crypto.spec和javax.crypto.interfaces等软件包。
2.Sun,SunRsaSign,SunJCE等实际提供者都包含了具体的加密实现。
无论什么时候提及特定的JCA提供者,都可以找到与之对应的名称。
警告:JCA可以轻松地将安全功能集成到您的应用程序中。然而,除了基本介绍讨论API所需的概念之外,本文档不包括安全/密码学理论。本文档也没有涵盖特定算法的优缺点,也不涵盖协议设计。密码学是一个高级课题,为了最好地利用这些工具,应该参考一个可靠的,最近的参考文献。
你应该总是明白你在做什么,为什么,而不是简单地复制随机代码,并期望它完全解决你的使用场景。不然就会出现,由于选择了错误的工具或算法,而部署了许多包含重大安全或性能问题的应用程序。
设计原则:
JCA是围绕这些原则设计的:
1.实现独立性和互操作性
2.算法独立性和可扩展性