11.3 单向认证服务

在上述模型分析中,我们提到了两种认证服务:单向认证服务和双向认证服务。

❑单向认证服务:仅需要服务器端服务器提供证书,验证服务器身份。

❑双向认证服务:需要服务器提供服务器证书的前提下,要求客户端提供客户证书,同时验证服务器和客户身份。

单向认证服务和双向认证服务是网络交互平台中最高级别的安全服务,广泛应用于电子商务等领域。

本文以配置Tomcat安全服务为例,介绍如何搭建基于单向认证服务和双向认证服务的网络交互平台。读者朋友可以从Apache官网(http://tomcat.apache.org/)下载Tomcat当前的最新版本。

为便于演示,本文使用KeyTool工具构建自签名证书,搭建单向认证服务。实际应用时,请读者朋友使用经由CA机构签发的数字证书。

本文将使用密钥库文件zlex.keystore和数字证书文件zlex.cer,相关实现请参考第10章内容。

11.3.1 准备工作

单向认证服务实现不需要实现任何代码,我们仅需要对Tomcat做细微调整,完成HTTPS协议配置和密钥库配置,即可完成服务构建工作。

1.域名绑定

我们在第10章构建证书时,使用域名www.zlex.org作为用户姓名。为使自签名证书通过浏览器验证,我们需要将域名www.zlex.org定位到本机(localhost)上。在Windows操作系统中可以通过修改hosts文件实现这一功能。

打开C:\Windows\System32\drivers\etc\hosts文件,在文件末尾追加“127.0.0.1 www.zlex.org”,如图11-12所示。

我们可以执行ping命令确认域名绑定成功,如果该域名指向本机,就说明域名绑定成功,如图11-13所示。

如果这时Tomcat已经启动,我们将能通过地址http://www.zlex.org:8080/访问Tomcat欢迎页面,如图11-14所示。

2.证书导入

在进行服务验证操作之前,我们需要通过浏览器导入自签名证书文件zlex.cer。

以IE浏览器为例,点击“工具”菜单,在弹出菜单中点击“Internet选项”,在弹出的“Internet选项”对话框中选择“内容”选项卡。如图11-15所示。

figure_0383_0121

图 11-12 配置hosts文件

figure_0383_0122

图 11-13 验证域名绑定

figure_0383_0123

图 11-14 验证域名绑定验证

在“内容”选项卡证书栏中点击“证书”按钮。在弹出的“证书”对话框中选择“受信任的根证书颁发机构”选项卡,点击“导入”按钮。

在弹出的“证书导入向导”对话框中,点击“下一步”,单击“浏览”按钮选择自签名证书文件—zlex.cer文件,如图11-16所示。

figure_0384_0124

图 11-15 Internet选项-内容选项卡

figure_0384_0125

figure_0384_0126

图 11-16 证书导入向导

继续点击“下一步”按钮,直至完成证书导入。最终,我们将在“受信任的根证书颁发机构”选项卡中找到我们导入的自签名证书,如图11-17所示。

如果我们此处使用的是经过国际CA机构签发的数字证书,将无需导入。

3.服务器配置

相信大多数读者朋友对于Tomcat都比较了解,配置SSL/TLS协议需要修改server.xml文件。server.xml文件位于Tomcat的conf目录中,属于Tomcat核心配置文件。相关配置可参见官网文档(http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html)。

figure_0385_0127

图 11-17 导入自签名根证书1

打开server.xml文件,并找到包含关键字“TLS”的一行,内容如代码清单11-1所示。

代码清单11-1 SSL/TLS原始配置


<!—

<Connector

port="8443"

protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="false"

sslProtocol="TLS"/>

—>


仅仅将上述代码中的注释打开还无法完成构建HTTPS协议服务,需要配置相应的证书和密钥库等。

在第10章中,我们将签发的数字证书文件zlex.cer导入密钥库zlex.keystore中。现在我们需要将密钥库文件zlex.keystore放置在Tomcat的conf目录下,并将其配置在上述配置文件中,如代码清单11-2所示。

代码清单11-2 配置SSL/TLS单向认证


<Connector

port="443"

SSLEnabled="true"

clientAuth="false"

maxThreads="150"

protocol="HTTP/1.1"

scheme="https"

secure="true"

sslProtocol="TLS"

keystoreFile="conf/zlex.keystore"

keystorePass="123456"/>


为使得HTTPS协议配置生效,我们需要将密钥库文件参数keystoreFile指向密钥库文件,并设定密钥库密码参数keystorePass,密钥库类型参数keystoreType默认值为“JKS”。

如果不显示配置信任库参数,信任库文件参数truststoreFile默认将指向密钥库文件,信任库密码参数truststorePass默认指向密钥库密码,信任库类型参数truststoreType默认值为“JKS”。

这里我们需要注意客户端验证参数clientAuth,当前默认值为“false”。构建双向认证服务时需将其置为“true”,并修改密钥库参数和信任库参数。

原有配置指定端口参数port为8443,而HTTPS协议绑定的端口是443,我们可以将其改为443,而无需通过端口访问HTTPS。

启动Tomcat,在浏览器中访问地址https://www.zlex.org/查看数字证书是否生效,如图11-18所示。

figure_0386_0128

图 11-18 证书验证生效

虽然这时我们连接的是本地服务器,但仍会感到联网有些迟钝(大约5秒钟)。这是因为浏览器访问CA机构验证该证书,并初始化加密/解密信息等,这一系列动作致使访问延时。

此时,如果未能正确导入自签名证书,将得到“证书错误”提示页面,如图11-19所示。

这是由于自签名证书的根证书没有通过CA验证而提示证书错误。我们可以点击“继续浏览此网站”转到下一页面,如图11-20所示。

此时,请导入根证书文件,并重新打卡IE浏览器访问上述地址。

figure_0387_0129

图 11-19 证书错误提示1

figure_0387_0130

图 11-20 证书错误提示2