JSSE(Java Security Socket Extension,Java安全套接字扩展)是Sun为了解决在Internet上的安全通讯而推出的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,开发人员可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。这篇文章主要描述如何使用JSSE接口来控制SSL连接。 phH海岸线网络安全资讯站
首先我通过一个简单的客户机/服务器程序来介绍如何利用JSSE进行编程。当建立客户端时,我们需要配置KeyStore和TrustStore文件,这样在程序中我们才可以从客户端的文件系统中加载它们。然后文章将讨论授权和身份验证方面的问题。通过从KeyStore中选择不同的授权,客户端程序可以连接到不同的服务器。 phH海岸线网络安全资讯站
运行例子程序phH海岸线网络安全资讯站
下载例子程序 phH海岸线网络安全资讯站
在运行JSSE程序前,你需要正确安装JSSE。如果你安装了J2SE 1.4,JSSE已经被自动安装并配置好了,如果你使用的是其他版本的Java,你需要从官方站点上下载并安装JSSE,安装过程这里就不再赘述。由于JSSE是在J2SE 1.4中才成为标准的,并且J2SE 1.4中的JSSE和以前的JSSE有一些细微的差别,而且文中的例子都是在J2SE 1.4下调试的,因此推荐你使用J2SE 1.4运行这些例子。 phH海岸线网络安全资讯站
phH海岸线网络安全资讯站
在深入介绍JSSE之前,让我们来一个简单的客户机/服务器程序,程序中包含了两个文件:SimpleSSLServer和SimpleSSLClient。在运行程序之前,你需要配置下面这些KeyStore和TrestStore文件: phH海岸线网络安全资讯站
? 一个客户端的KeyStore文件,该文件中包含了对Alice和Bob的授权。 phH海岸线网络安全资讯站
? 一个服务器端的KeyStore文件,该文件中包含了对server的授权。 phH海岸线网络安全资讯站
? 一个名为clientTrust的客户端TrustStore文件,该文件中包含了对server的授权。 phH海岸线网络安全资讯站
? 一个名为serverTrust的服务器端TrustStore文件,该文件中包含了对Alice和Bob的授权。 phH海岸线网络安全资讯站
使用keytool可以帮助你创建这些文件(该工具在Java的bin目录下): phH海岸线网络安全资讯站
? 一个客户端的KeyStore文件,该文件中包含了对Alice和Bob的授权。 phH海岸线网络安全资讯站
在命令窗口中输入下面的命令: phH海岸线网络安全资讯站
keytool -genkey -alias alice -keystore clientKeysphH海岸线网络安全资讯站
窗口中会出现下面的提示,根据提示输入相应的信息: phH海岸线网络安全资讯站
phH海岸线网络安全资讯站
输入keystore密码: passwordphH海岸线网络安全资讯站
您的名字与姓氏是什么?phH海岸线网络安全资讯站
[Unknown]: AlicephH海岸线网络安全资讯站
您的组织单位名称是什么?phH海岸线网络安全资讯站
[Unknown]: DevelopmentphH海岸线网络安全资讯站
您的组织名称是什么?phH海岸线网络安全资讯站
[Unknown]: DCQphH海岸线网络安全资讯站
您所在的城市或区域名称是什么?phH海岸线网络安全资讯站
[Unknown]: ChongQingphH海岸线网络安全资讯站
您所在的州或省份名称是什么?phH海岸线网络安全资讯站
[Unknown]: ChongQingphH海岸线网络安全资讯站
该单位的两字母国家代码是什么phH海岸线网络安全资讯站
[Unknown]: CHphH海岸线网络安全资讯站
CN=Alice, OU=Development, O=DCQ, L=ChongQing, ST=ChongQing, C=CH 正确吗?phH海岸线网络安全资讯站
[否]: 是phH海岸线网络安全资讯站
输入的主密码phH海岸线网络安全资讯站
(如果和 keystore 密码相同,按回车):phH海岸线网络安全资讯站
通过相同的方式可以建立对Bob的授权。 phH海岸线网络安全资讯站
keytool -genkey -alias bob -keystore clientKeysphH海岸线网络安全资讯站
注意在名字与姓氏一栏中填写Bob。在完成后可以键入下面的命令来检测是否已经正确完成了授权。 phH海岸线网络安全资讯站
keytool -list -v -keystore clientKeysphH海岸线网络安全资讯站
? 一个服务器端的KeyStore文件,该文件中包含了对server的授权。 phH海岸线网络安全资讯站
phH海岸线网络安全资讯站
在命令窗口中键入下面的命令: phH海岸线网络安全资讯站
keytool -genkey -alias server -keystore serverKeysphH海岸线网络安全资讯站
注意将密码设为password,名字与姓氏设定为Server。完成授权后同样可以通过上面提到的命令来检测。 phH海岸线网络安全资讯站
? 一个名为clientTrust的客户端TrustStore文件,该文件中包含了对server的授权。以及一个名为serverTrust的服务器端TrustStore文件,该文件中包含了对Alice和Bob的授权。 phH海岸线网络安全资讯站
keytool -export -alias server -keystore clientKeys -file server.cerphH海岸线网络安全资讯站
输入keystore密码: passwordphH海岸线网络安全资讯站
保存在文件中的认证 phH海岸线网络安全资讯站
keytool -export -alias alice -keystore clientKeys -file alice.cerphH海岸线网络安全资讯站
输入keystore密码: passwordphH海岸线网络安全资讯站
保存在文件中的认证 phH海岸线网络安全资讯站
keytool -export -alias bob -keystore clientKeys -file bob.cerphH海岸线网络安全资讯站
输入keystore密码: passwordphH海岸线网络安全资讯站
保存在文件中的认证 phH海岸线网络安全资讯站
这样keytool就在当前目录下创建了三个授权文件。然后我们将server.cer文件导入到clientTrust文件中;将alice.cer和bob.cer导入到serverTruest文件中: phH海岸线网络安全资讯站
phH海岸线网络安全资讯站
keytool -import -alias server -keystore clientTrust -file server.cerphH海岸线网络安全资讯站
keytool -import -alias alice -keystore serverTrust -file alice.cerphH海岸线网络安全资讯站
keytool -import -alias bob -keystore serverTrust -file bob.cerphH海岸线网络安全资讯站
到目前为止,在当前目录下包含clientKeys,serverKeys,clientTrust,serverTrust四个文件。完成了KeyStore和TrustStore的设置后就可以运行例子程序了。首先需要运行服务器程序: phH海岸线网络安全资讯站
java -Djavax.net.ssl.keyStore=serverKeys phH海岸线网络安全资讯站
-Djavax.net.ssl.keyStorePassword=password phH海岸线网络安全资讯站
-Djavax.net.ssl.trustStore=serverTrust phH海岸线网络安全资讯站
-Djavax.net.ssl.trustStorePassword=password SimpleSSLServerphH海岸线网络安全资讯站