Java Secure Socket Extension (JSSE) -介绍篇
JSSE支持安全的Internet通信。它提供了TLS和DTLS协议的一个框架和Java版本的实现,包括数据加密、服务器认证、消息完整性、和客户端认证功能。
Introduction to JSSE
网络传输的数据,容易被不相干的人访问。如果数据含有私密信息,比如密码或者信用卡号,必须让未经授权的人无法理解。数据也需要确保在传输过程中,不被修改,不管是有意的,还是无意的。Transport Layer Security (TLS)协议设计来帮助保护跨网络传输的数据的隐私和完整性。
JSSE确保安全的Internet通信。使用JSSE,开发者可以在客户端和服务器之间使用任何TCP/IP之上的应用层协议(比如HTTP、Telnet或者FTP)安全地传递数据。
通过抽象复杂的底层安全算法和握手机制,JSSE最小化了危险的安全漏洞的风险。此外,做成模块,简化了程序开发,开发者能直接集成到他们的程序里。
JSSE提供了API框架和这些API的实现。
JSSE API补充了核心网络和加密服务,他们在java.security和java.net包内,提供了扩展的网络socket类,trust管理,key管理,SSL上下文和socket工厂框架。因为SSLSocket类基于blocking I/O模式,JDK包括了SSLEngine类以实现其他的I/O方法。
JSSE API支持下列安全协议:
- DTLS:1.0和1.2版本
- TLS:1.0、1.1、1.2和1.3版本
- SSL:3.0版本
这些安全协议封装了通用的双向流socket,JSSE API增加了认证、加密和完整性保护的支持。
JSSE是Java SE平台的安全组件,基于和Java Cryptography Architecture (JCA) Reference Guide相同的设计原则。加密相关的组件允许他们与实现无关,也尽可能与算法无关。JSSE使用JCA框架定义的加密服务提供者(Cryptographic Service Providers)。
Java SE平台的其他安全组件包括Java Authentication and Authorization Service (JAAS) Reference Guide和Java Security Tools。JSSE包括很多和JCA相同的概念和算法,但是,在简单的流socket API之下自动应用他们。
JSSE API被设计用来允许无缝地使用其他SSL/TLS/DTLS协议和Public Key Infrastructure (PKI)实现。
开发者可以提供替代逻辑,来决定远方主机是否应该被信任,或者应该给远方主机发送什么样的认证材料。
JSSE Features and Benefits
JSSE包括下列主要的好处和属性:
- JDK的标准组件
- 可扩展的,基于供应商的架构
- 100%的纯Java实现
- 提供了TLS/DTLS的API支持
- SSL 3.0, TLS (versions 1.0, 1.1, 1.2和1.3), and DTLS (versions 1.0和1.2)的实现
- 能创建安全channels的类(SSLSocket, SSLServerSocket和SSLEngine)
- cipher suite协商支持,这是 TLS/DTLS握手的一部分,用来初始化或者验证安全通信
- 提供了客户端和服务器认证支持,这也是TLS/DTLS 握手的一部分
- TLS封装的HTTP支持,它允许使用HTTPS访问web页
- 服务器session管理API,管理内存驻留的SSL sessions
- 证书状态请求扩展的支持(OCSP),节省了客户端证书校验的往返次数和资源
- Server Name Indication (SNI)延期支持,它扩展了TLS/DTLS 协议,表示握手期间,客户端试图连接的服务器名称
- 握手期间的endpoint识别支持,防止中间人攻击
- 加密算法约束支持,对JSSE协商的算法进行细粒度控制
JSSE Standard API
JSSE标准API,位于javax.net和javax.net.ssl包,提供了:
- 为客户端和服务器量身定制的安全sockets
- 生成和消费TLS/DTLS数据流的non-blocking引擎(SSLEngine)
- 生成sockets, server sockets, SSL sockets和SSL server sockets的工厂。使用这些工厂,可以封装socket增加和配置行为
- 代表安全socket上下文的类,它是安全socket工厂和引擎的工厂
- key和trust管理接口(包括X.509),以及可以生成他们的工厂
- 安全HTTP URL连接(HTTPS)的类
SunJSSE Provider
Oracle的Java SE实现包括叫做SunJSSE的JSSE提供者,使用JCA预安装、预注册。提供了下列加密服务:
- SSL 3.0, TLS (versions 1.0, 1.1, 1.2和1.3), and DTLS (versions 1.0 和 1.2)安全协议的实现
- 通用的TLS、DTLS加密套件的实现
- 基于X.509的key管理,它从标准的JCA keystore选择合适的认证keys
- 基于X.509的trust管理,实现了认证链校验规则