java安全套接口扩展(jsse)是一套提供安全互联网通信功能的java包,是用100%纯java实现的安全套接口层(ssl)的框架.这些包允许作为java开发人员的您开发安全的网络应用,运行任何基于tcp/ip的应用协议,如:http.ftp.telnet或nntp等,在客户机与服务器之间建立安全的数据通道. 【程序编程相关:c#改写的(vb.net)模拟时钟 】
任何在计算机网络或者互联网上传输的数据都可能被截听.其中一些信息可能是敏感的,比如信用卡号与其它私人数据.为了在企业环境以及电子商务应用中更好地使用互联网,应用必须使用加密.认证与安全通讯协议来保护用户数据.安全超文本传输协议,一个基于安全套接口层的 http 协议,早已成功地应用于电子商务应用. 【推荐阅读:Asp.net中使用GDI+繪製圖形 】
使用 jsse api; 将 ssl 集成进您已有的客户机 - 服务器应用; 开发简单的 http 服务器; 修改 http 服务器,使之能处理 https 请求; 使用 j2se 中的 keytool 程序产生您自己的证书; 开发.配置与运行一个安全的 http 服务器.ssl概述 【扩展信息:小议主子表INT自增主键插入记录的方法 】
一个好消息是java 2 sdk标准版1.4版本(j2se 1.4)已经集成了jsse.这意味着如果您已经安装了j2se 1.4,那么您无需下载任何额外的包,就可以创建基于ssl的安全的互联网应用.本系列文章共分为两个部份,它提供了一个易于实践的教程,说明了如何为今日与未来的市场开发安全的互联网应用.本文所关注的是服务器,下一篇文章关注的是客户机.本文将以介绍ssl的详细概述开始,向你展示以下内容:
ssl协议是由netscape于1994年开发的,它允许客户机(通常是web浏览器)与http服务器通过安全的连接进行通信.作为在不安全的公网上所交换信息的保护手段,它提供加密.来源认证与数据完整性.当前存在多个ssl版本:ssl 2.0存在安全缺陷,现在已经极少使用;ssl 3.0得到了广泛的支持;最后,作为ssl 3.0的改进版本,传输层安全(tls)被采纳为互联网标准,并被几乎所有新近的软件所支持.
加密保护数据不受未经授权的访问,这是通过在传输前将数据转换为表面上没有任何意义的数据形式来实现的.数据在一端被加密(客户机或服务器).传送并由另一端解密,然后处理.
来源认证是检验数据发送者身份的一种方法.当浏览器或其它客户机第一次试图通过安全连接进行通信时,服务器以证书的形式发送客户机一套凭证.
证书是由可信赖的机构,称之为认证中心(ca)发布与验证的.证书代表着一个人的公开身份.它就象一个签名文件:我证明在文件中的公钥属于在该文件中命名的实体.签名:(认证中心).知名的ca包括verisign.entrust与thawte.请注意:当前ssl/tls使用的证书是x.509证书.
数据完整性是指确保在传输过程中数据不被修改.
ssl与tcp/tp协议栈
正如ssl的名称-安全套接口层所指出的,ssl连接与tcp的套接口连接类似.由于在协议栈中ssl连接恰恰位于tcp连接之上与应用层之下(如图1所示),因此,您可以认为ssl连接是安全的tcp连接.然而,需要注意的是,ssl并不支持诸如带外数据(out-of-bound)的tcp特性.
协商式加密
正是由于ssl的特性使得它成为安全的电子商务事务处理事实上的标准传输手段.ssl对协商式加密以及认证算法的支持就是其中的两个特性.ssl的设计者意识到并非所有的参与者都使用相同的客户端软件,因此并非所有的客户机将包括特定的加密算法.对服务器而言,也是如此.客户机与服务器是一个连接的两端.在它们最初的握手时,它们将协商所使用的加密/解密算法(加密套件).如果双方没有共同的满足需要的算法,那么在这种情况下,连接的尝试将失败.
需要注意的是,尽管ssl允许客户机与服务器双方相互认证,但通常只有服务器是在ssl层中认证的.而客户机则通常是通过使用ssl保护的通道传递口令的方式,在应用层中认证的.这种模式在银行.证券交易以及其它安全的web应用中普遍使用.
图2图解说明了ssl完整的握手协议.它展示了在ssl握手过程中消息交换的顺序.
消息的含义:
1. clienthello:客户机向服务器发送信息,诸如ssl协议版本.会话id以及加密套件信息,如加密算法与所支持的密钥长度; 2. serverhello:服务器选择客户机与服务器都支持的最佳的加密套件,并将信息发送给客户机; 3. certificate:服务器向客户机发送包含了服务器公钥的证书.此消息是可选的,在要求服务器认证时需要使用.换句话说,它被用来向客户机确认服务器的身份; 4. certificate request:仅当服务器要求客户机认证自身时,此消息才被发送.大多数电子商务应用并不要求客户机对自己进行认证. 5. server key exchange:如果包含了服务器公钥的证书不能满足密钥交换的需要,此消息被发送; 6. serverhellodone:此消息告知客户机,服务器已经完成了最初的协商过程; 7. certificate:仅当服务器要求客户机认证自身时,此消息才被发送. 8. client key exchange:客户机为客户机与服务器产生一个共享的秘密密钥(secret key).如果使用了rsa加密算法,客户机就使用服务器的公钥加密此秘密密钥,并发送给服务器.服务器使用它的私钥或秘密密钥解密此消息,并取出共享的秘密密钥.现在,客户机与服务器共享分布式安全的秘密密钥; 9. certificate verify:如果服务器被要求对客户端进行认证,此消息允许服务器完成认证过程;... 下一页