前言
做这个实验对Tomcat的版本有要求,最好是使用Tomcat8。因为我之前使用Tomcat10,然后一直做不出来。
要求
部署Web服务器端HTTPS功能,通过网络嗅探分析HTTPS通过SSL实施安全保护的效果
关键步骤
- 首先要给tomcat配置https,也就是让tomcat使用https协议。
想要通过https访问程序,需要获得一个证书,自己给自己签发而来的证书也叫自签名ssl证书。这里我要使用java jdk自带的keytool工具来创建本地SSL证书。
打开jdk下的bin目录:
在该目录下看到keytool工具后,在该目录中打开终端:
输入如下图中的命令,生成证书:
证书的密钥我设置为123456。
然后来到tomcat的conf目录下,发现证书已经生成:
而后打开该目录下的server.xml文件,在8080端口后添加如图中的代码:
这样就让tomcat可以通过https://localhost:8443的方式访问。
点击不安全我们可以查看该网站的证书:
最后,为了方便访问,我们要让访问http://localhost:8080时自动跳转到https://localhost:8443。
在conf目录下的web.xml文件的最后面(在标签的包含内)添加如下代码即可:
2.因为没有第二台电脑,所以上面做的https的连接无法使用wireshark进行捕获。所以这里我选择用百度的官网来查看https中SSL的作用。
如图,百度官网使用的是https协议。
在最新版的wireshark中,已经将SSL改为TLS,所以直接用wireshark进行捕获是不会显示有SSL协议的。
我们知道,http只有三次TCP握手,而https除了TCP的三次握手外,还有9次SSL握手。如下图,我对百度官网进行访问,发现很多TCP三次握手之后,就会有很多的TLS协议,这里的TLS协议实际就是SSL协议。
显然,因为SSL协议对https的信息进行了加密,所以在捕获到数据包之后我们无法直接看到https的详细信息。
3.为了解密https,需要通过设置环境变量截取浏览器的pre_master_secret。
如上图,在用户变量中添加SSLKEYLOGFILE,变量值可以随意设置,方便找到就行。
然后我们打开谷歌浏览器,访问一下百度官网,之后发现对应目录下成功出现了文件ssl.log:
接下来打开wireshark,点击编辑来到首选项:
在Protocols也就是协议中找到TLS协议(最新版的wireshark没有SSL协议)。
将刚刚生成的文件路径放入下方的框中。而后保存退出,再重新进行捕获:
然后我们就可以直接看到https数据包中的信息了。同时http的数据包中多了一列数据可以进行查看:Hypertext Transfer Protocol,里面放的就是一些密钥,证书之类的信息数据。
在Web和HTTP广泛应用的现代信息社会中HTTPS意义分析
http是明文传输的,数据都是未加密的,安全性较差,https(ssl+http)数据传输过程是加密的,安全性较好。所以在现代信息社会中,在这十分缺乏信息安全的时代,https是十分有必要的。当然,https也不是方方面面都比https好,比如,http建立连接只需要进行TCP三次握手(共3个包),而https除了TCP三次握手外,还要加上ssl握手需要的9个包(共12个包),所以https页面的响应速度要比http慢一些,不过在硬件软件都快速更新换代的现代,这些缺点几乎可以忽略不计。
结语
其实信息安全实践一后面还有一个SSL编程实践,但是因为我写的不好就不放出来了,是个半成品。但是SSL编程其实就是要用弄一个服务端和客户但通信,这个刚好就是网络编程的内容,可以去看我写的网络编程实践或者其他博主的相关博客。