11.4 双向认证服务
双向认证服务与单向认证服务的主要差别在于双向认证服务增加了客户证书验证环节。这使得消息收发双方可以通过证书相互验证对方的身份,达到双向认证的作用。
双向认证服务需要根证书、服务器证书和客户证书共3项证书。我们可以通过OpenSSL工具构建这3项证书对应的个人信息交换文件(ca.p12、server.p12和client.p12文件)。
为便于演示,本文使用OpenSSL工具构建自签名根证书、服务器证书和客户证书,搭建双向认证服务。实际应用时,请读者朋友使用经由CA机构签发的根证书。
本文将使用ca.p12、server.p12和client.p12个人信息交换文件构建双向认证,个人信息交换文件构建相关实现请参考第10章相关内容。
11.4.1 准备工作
双向认证服务实现同样不需要实现任何代码,与单向认证服务构建几乎毫无差别。
由于这里我们使用域名www.zlex.org作为用户姓名,因此仍需进行域名绑定,相关操作可参照11.3节的内容。除此之外,我们需要导入根证书和客户证书,同时需要对Tomcat做相应修改。
1.证书导入
本文将使用ca.p12、server.p12和client.p12个人信息交换文件构建双向认证,在验证操作之前,请导入ca.p12和client.p12文件。
❑导入ca.p12文件
ca. p12文件是CA根证书的个人信息交换文件,我们可以像导入zlex.cer文件那样将其导入。需要注意的是,这里我们导入的是个人信息交换文件,在“证书导入向导”对话框中点击“浏览”按钮时,指定个人信息交换文件格式(.p12;.pfx),如图11-22所示。
选择ca.p12文件,单击“下一步”按钮,在密码输入框中输入CA根证书密码(这里为“123456”),如图11-23所示。
单击下一步按钮,直至证书导入成功。最终,我们将在“受信任的根证书颁发机构”选项卡中找到我们导入的自签名证书,如图11-24所示。
图 11-22 选择证书导入
图 11-23 输入密码
图 11-24 导入自签名根证书2
❑导入client.p12文件
client. p12文件导入与ca.p12文件导入基本相同。
在“证书”对话框中选择“个人”选项卡,点击“导入”按钮。在“证书导入向导”对话框中点击“浏览”按钮时,指定个人信息交换文件格式(.p 1 2;.p f x)。选择client.p12文件,单击“下一步”按钮,在密码输入框中输入客户证书密码(这里为“123456”),单击下一步按钮,直至证书导入成功。最终,我们将在“个人”选项卡中找到我们导入的客户证书,如图11-25所示。
图 11-25 导入客户证书
2.服务器配置
这里我们需要将ca.p12和server.p12文件复制到Tomcat的conf目录下。同时,需要在Windows系统下通过IE浏览器导入ca.p12和client.p12文件。
接下来,我们需要在Tomcat的server.xml文件中配置双向认证,如代码清单11-11所示。
代码清单11-11 配置SSL/TLS双向认证
<Connector
SSLEnabled="true"
clientAuth="true"
maxThreads="150"
port="443"
protocol="HTTP/1.1"
scheme="https"
secure="true"
sslProtocol="TLS"
keystoreFile="conf/server.p12"
keystorePass="123456"
keystoreType="PKCS12"
truststoreFile="conf/ca.p12"
truststorePass="123456"
truststoreType="PKCS12"/>
这里的密钥库文件参数keystoreFile指向server.p12文件,密钥库密码参数keystorePass值为“123456”,密钥库类型参数keystoreType值为“PKCS12”。
这里请读者朋友注意信任库的参数配置。与单向认证服务配置不同,双向认证服务区分信任库文件和密钥库文件。此时,server.p12文件将作为密钥库文件,而ca.p12文件则作为信任库文件。
因此,信任库文件参数truststoreFile指向ca.p12文件,信任库密码参数truststorePass值为“123456”,信任库类型参数truststoreType值为“PKCS12”。这一点与单向认证有着明显的差别,往往容易被忽视,将信任库与密钥库混为一谈。
在上述配置中,我们将客户端验证参数clientAuth的值置为“true”,这是打开双向认证的关键一步。
现在,我们在浏览器中访问地址https://www.zlex.org/,结果如图11-26所示。
这说明双向认证已经成功构建,此处浏览器要求用户确认使用客户证书。“单击此处查看证书属性”,我们将获得客户证书“常规”信息,如图11-27所示。
点击图11-26中的“确定”按钮将给出密钥授权提示,如图11-28所示。
在“申请使用密钥的权限”对话框中选中“授予权限”并确认后,我们将得到如图11-14所示的Tomcat欢迎页面。
图 11-26 客户证书确认提示
图 11-27 客户证书
图 11-28 密钥授权提示
其实,我们在使用一些电子商务平台时也会使用到双向认证服务器,但却从未见到如图11-26和图11-28所示的页面。这是因为电子商务平台为了提高用户使用便捷性,通过ActiveX控件替用户完成了这些页面的相关操作。
如果我们未能导入client.p12文件,浏览器则会提示该页面访问失败。