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所示。
图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握手协议确定。不同的客户端同一时间访问同一服务时,将有可能使用不同的协议或算法,唯一可以确定的是通过数字证书确定的非对称加密算法。
这里要说明一点,使用非对称加密算对数据进行加密/操作的效率相当低,而使用对称加密算法进行加密/操作的效率相当高。合理的解决办法是使用非对称加密算法传递对称加密算法的密钥,使用对称加密算法对数据加密。