在网络上,信息在由源主机到目标主机的传输过程中会经过其他计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易时,网络上的信息有可能被非法分子监听,从而导致个人隐私的泄露。
由于Internet和Intranet体系结构存在一些安全漏洞,总有某些人能够截获并替换用户发出的原始信息。
随着电子商务的不断发展,人们对信息安全的要求越来越高,于是Netscape公司提出了SSL协议,目的为了能在开放网络上安全保密地传输信息。
Java安全套接字扩展(JSSE,Java Secure Socket Extension)为基于SSL和TLS协议的Java网络应用程序提供了Java API以及参考实现。
JSSE支持数据加密、服务器端身份验证、数据完整性以及可选的客户端身份验证。使用JSSE,能保证采用各种应用层协议(比如HTTP、Telnet和FTP等)的客户程序与服务器程序安全地交换数据。
JSSE封装了底层复杂的安全通信细节,使得开发人员能方便地利用它来开发安全的网络应用程序。
下文参考了《Java网络编程核心技术详解》一书的第15章,将结合具体范例来向大家介绍JSSE的用法。
JSSE API 简介
JSSE封装了底层复杂的安全通信细节,使得开发人员能方便地都它来开发安全的网络应用程序。JSSE主要包括四个包:
- javax.net.ssl包:包括进行安全通信的类,比如SSLServerSocket和SSLSocket类。
- javax.net包:包括安全套接字的工厂类,比如SSLServerSocketFactory和SSLSocketFactory类。
- java.security.cert包:包括处理安全证书的类,如X509Certificate类。X.509是由国际电信联盟(ITU-T)制定的安全证书的标准。
- com.sun.net.ssl包:包括Oracle公司提供的JSSE的实现类。
JSSE具有以下重要特征:
- 纯粹用Java语言编写。
- 可以出口到大多数国家。
- 提供了支持SSL的JSSE API和JSSE实现。
- 提供了支持TLS的JSSE API和JSSE实现。
- 提供了用于创建安全连接的类,如SSLSocket、 SSLServerSocket 和 SSLEngine。
- 支持加密通信。
- 支持客户端和服务器端的身份验证。
- 支持SSL会话。
- JSSE的具体实现会支持一些常用的加密算法,比如RSA(加密长度2048位)、RC4(密钥长度128位)和DH(密钥长度1024位)。
下面展示了JSSE API的主要类框图。
JSSE中负责安全通信的最核心的类是 SSLServerSocket 类与SSLSocket 类,它们分别是 ServerSocket 与 Socket 类的子类。SSLSocket 对象由 SSLSocketFactory 创建,此外, SSLServerSocket 的 accept() 方法也会创建 SSLSocket。SSLServerSocket 对象由 SSLServerSocketFactory 创建。SSLSocketFactory 、 SSLServerSocketFactory 以及 SSLEngine 对象都由 SSLContext 对象创建。SSLEngine 类用于支持非阻塞的安全通信。
本文暂时没有评论,来添加一个吧(●'◡'●)