虽然JDK最新版本已经有了JDK5和JDK6,但是在目前已经成熟的企业级应用中,JDK1.4所占的比例仍然是巨大的。JDK1.4在信息传递的安全性保证方面,主要有以下概念:
1,消息摘要:这是一种与消息认证码结合使用以确保消息完整性的技术;
2,私钥加密:被设计用来确保消息机密性的技术;
3,公钥加密:允许通信双方不必事先协商秘钥即可共享秘密消息的技术;
4,数字签名:证明另一方的消息确定来自正确通信方的位模式;
5,数字证书:通过让第三方认证机构认证消息,向数字签名添加另一级别安全性的技术;
6,代码签名:由可信的实体将签名嵌入被传递的代码中的概念;
7,SSL/TLS:在客户机和服务器之间建立安全通信通道的协议。传输层安全性(Transport Layer Security (TLS))是安全套接字层(Secure Sockets Layer (SSL))的替代品。
5.数字证书
数字签名方式存在一个问题,就是它证实消息是由特定的发送方发送的,但我们无法知道发送方确实是她所说的那个人。如果某人实际上是 Amanda,却自称 Alice,并对一条消息进行了签名,那会怎么样呢?我们可以通过使用数字证书来改进安全性,它将一个身份标识连同公钥一起进行封装,并由称为认证中心或 CA 的第三方进行数字签名。
从实际意义上来说,认证中心是验证某个实体的身份并用 CA 私钥对该实体的公钥和身份进行签名的组织。消息接收方可以获取发送方的数字证书并用 CA 的公钥验证(或解密)该证书。这可以证实证书是否有效,并允许接收方抽取发送方的公钥来验证其签名或向他发送加密的消息。浏览器和 JDK 本身都带有内置的来自几个 CA 的证书及其公钥。
JDK 1.4 支持X.509数字证书标准。实际上你可以利用Keytool命令生成密钥库和证书申请,并由微软证书服务器颁发证书,详细方法及内容将在另一篇文章中单独给出。
6.代码签名
JAR 文件在 Java 平台上相当于 ZIP 文件,允许将多个 Java 类文件打包到一个具有 .jar 扩展名的文件中。然后,可以对这个 JAR 文件进行数字签名,以证实其中的类文件代码的来源和完整性。该 JAR 文件的接收方可以根据发送方的签名决定是否信任该代码,并可以确信该内容在接收之前没有被篡改过。JDK 提供了带有这种功能的jarsigner工具。
jarsigner 工具
jarsigner 工具将一个 JAR 文件、一个私钥和相应的证书作为输入,然后生成 JAR 文件的签名版本作为输出。它为 JAR 文件中的每个类计算消息摘要,然后对这些摘要进行签名以确保文件的完整性并标识文件的拥有者。
在 applet 环境中,HTML 页面引用已签名 JAR 文件中包含的类文件。当浏览器接收这个 JAR 文件时,会对照任何安装的证书或认证中心的公用签名检查该 JAR 文件的签名以验证其有效性。如果未找到现有的证书,则会向用户显示一个提示屏幕,给出证书详细信息并询问用户是否打算信任该代码。
代码签名示例
在本示例中,我们首先从 .class 文件创建 JAR 文件,然后通过在用于签名的密钥库中指定证书的别名来对 JAR 文件签名。然后,我们对已签名的 JAR 文件运行验证检查。
D:\IBM>jar cvf HelloWorld.jar HelloWorld.class
added manifest
adding: HelloWorld.class(in = 372) (out= 269)(deflated 27%)
D:\IBM>jarsigner HelloWorld.jar JoeUserKey
Enter Passphrase for keystore: password
D:\IBM>jarsigner -verify -verbose -certs HelloWorld.jar
137 Tue Apr 15 12:38:38 CDT 2008 META-INF/MANIFEST.MF
190 Tue Apr 15 12:38:38 CDT 2008 META-INF/JOEUSERK.SF
938 Tue Apr 15 12:38:38 CDT 2008 META-INF/JOEUSERK.RSA
0 Tue Apr 15 12:38:00 CDT 2008 META-INF/
smk 372 Tue Apr 15 12:33:02 CDT 2008 HelloWorld.class
X.509, CN=Joe User, OU=Security, O="Company, Inc.", L=User City,
ST=MN, C=US (joeuserkey)
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
代码签名示例执行
下面是用于该程序的 HTML:
<HTML>
<HEAD>
<TITLE> Hello World Program </TITLE>
</HEAD>
<BODY>
<APPLET CODE="HelloWorld.class" ARCHIVE="HelloWorld.jar"
WIDTH=150 HEIGHT=25>
</APPLET>
</BODY>
</HTML>
当在将 Java 插件用作 Java 虚拟机的浏览器中执行这个示例时,会弹出一个对话框询问用户是否希望安装和运行由“Joe User”分发的已签名的 applet,并告知用户发布者的可靠性是由“Company,Inc.”验证的,但安全性结论是由一家未获信任的公司发出的。该安全性证书还未过期并仍然有效。它警告:“Joe User”断言该内容是安全的,仅当您相信“Joe User”所作的断言时才应该安装或查看其内容。向用户提供了下列选项:
(1)准许这个会话
(2)拒绝
(3)始终准许
(4)查看证书





