11.3.2 服务验证

根据Tomcat官方文档提示,完成HTTPS协议架设后,可以从request的属性中获得有关加密的相关信息,如加密算法、密钥长度等。我们可以通过构建一个简单的应用来验证上述描述。

首先,我们需要构建一个JSP页面,遍历request的属性,并将其打印。完整实现如代码清单11-3所示。

代码清单11-3 index.jsp页面1


<%@page language="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<%@page import="java.util.Enumeration"%>

<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>zlex.org</title>

</head>

<body>

<p>request属性信息

<pre>

<%

for(Enumeration en=request.getAttributeNames();en

.hasMoreElements();){

String name=(String)en.nextElement();

out.println(name);

out.println("="+request.getAttribute(name));

out.println();

}

%>

</pre>

</body>

</html>


接下来,我们需要创建一个最为普通的web.xml文件,如代码清单11-4所示。

代码清单11-4 web.xml文件


<?xml version="1.0"encoding="UTF-8"?>

<web-app

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID"

version="2.5">

<display-name>ssl</display-name>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>


最后,我们在Tomcat的webapps目录下创建一个ssl目录,并将上述index.jsp文件放在这个目录下。同时,在ssl目录下创建一个WEB-INF目录,并将web.xml文件放置其中。

现在,我们访问https://www.zlex.org/ssl/将得到request的全部属性值,如图11-21所示。

figure_0388_0131

图11-21 SSL/TLS协议中的request属性1

在这里我们获得了3个有关SSL/TLS协议的request属性:

❑javax.servlet.request.ssl_session:当前SSL/TLS协议的会话ID。

❑javax.servlet.request.key_size:当前加密算法所使用的密钥长度。

❑javax.servlet.request.cipher_suite:当前SSL/TLS协议所使用的加密套件。

通过javax.servlet.request.cipher_suite属性值(TLS_RSA_WITH_AES_128_CBC_SHA),我们获知本次连接所使用的协议为TLS协议,非对称加密算法为RSA算法,对称加密算法为AES算法,消息摘要算法为SHA1。其中,对称加密算法要求密钥长度为128位,且工作模式为CBC模式。

对于使用何种协议、对称加密算法以及消息摘要算法,需由客户端与服务器端交互通过SSL/TLS握手协议确定。不同的客户端同一时间访问同一服务时,将有可能使用不同的协议或算法,唯一可以确定的是通过数字证书确定的非对称加密算法。

这里要说明一点,使用非对称加密算对数据进行加密/操作的效率相当低,而使用对称加密算法进行加密/操作的效率相当高。合理的解决办法是使用非对称加密算法传递对称加密算法的密钥,使用对称加密算法对数据加密。