Https全揭秘系列-实践与分析

Https全揭秘系列 - 实践与分析

通过前面两篇文章,我们对于Https协议和TLS握手协议有了一定的理解,但是我认为不经过真正实践的话根本无法掌握这个协议,大家看完了过几天就应该忘的一干二净了。

这篇文章的标题是实践与分析,实践刚才讲了是为了真正掌握,那么为什么要加个分析呢?因为真正商用场景下关于Https故障的排查关键就在于如何去分析,至于分析有两种方法,下一篇文章我将针对实际工作中遇到的问题结合这两种方法进行分析。

话不多说,开始今天的文章

1.构建一个完整流程

这一章我将构造一个最简单的服务端与客户端,麻雀虽小五脏俱全,对于TLS握手过程的理解还是够用的。

1.1 服务端

服务端我使用Jetty作为容器,搭载一个简单的Servlet。由于代码非常简单,直接贴上完整代码。

我将上一篇文章中创建的server.keystore、server.truststore、client.keystore、client.truststore这四个文件放到了项目的src/main/resources/certs目录下。

在initParams方法中我初始化了构建服务端和Https的参数,这里面needClientAuth需要注意一下,Jetty使用这个参数来指定单向认证还是双向认证,注释中我也写了true情况下是TWOWAYCERTIFICATE也就是双向认证。

Jetty和Tomcat类似,都可以使用配置文件或者代码来初始化参数,这里我按照习惯使用代码初始化。

通过这些代码,我们就创建了一个部署在127.0.0.1:8083上的Jetty服务端,至于JettyServlet这个Servlet就是一个空的Servlet不做任何工作,服务端使用TLSv1.2协议。

1.2 客户端

客户端使用Apache的HttpClient

注意getSSLContext方法,这里同服务端一样,也是区分了单双向认证。

完整的项目源码可以使用Git直接拷贝下来

2.调试与抓包

IDEA和Eclipse可分别参照下面图片进行配置。

现在,我们启动服务端,在控制台中我们将看到以下几段信息

这一段信息显示了我们服务端加载的Keystore中的信息,还记得我们前一篇文章中创建的服务端Keystore中只有一个别名为server的私钥么,现在正确加载进来了,证书签名、加密算法都显示在上面。

接下来这段相信大家也能看明白,这是读取到的Truststore中的内容,也就是我们上篇文章中导入的客户端的证书信息。

这一串信息是我们服务端不使用的加密套件,这个与TLS版本有关。至于这么多加密套件有什么意义我们后面再讲。

接下来我们启动客户端,这里我直接贴出除了加密套件以外的完整信息

如果你理解了我刚才讲的服务端的相关解释,那么这个客户端的就一目了然了,客户端加载了别名为client的私钥作为自己的证书,信任了别名为server的证书。

通过这些信息,你可以明确知道自己的程序到底加载了那些证书,信任了哪些证书,这些信息对于故障排查至关重要。

由于篇幅原因,本篇文章到此为止,下一篇文章中我将结合上面JVM参数以及Wireshark抓包两种方式来具体分析整个握手过程。

如果您觉得我的文章对您有帮助,请点个赞或者转发此文章,感谢您的支持!

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

HTTP基本原理

在本节我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入一个 URL 到获取网页内容发生了一个怎样的过程,了解了这些内容,有助于去进一步了解爬虫的基本原理...

2778
来自专栏java一日一条

单点登录原理与简单实现

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,...

902
来自专栏orientlu

crontab 定式调度

今天在写脚本在几十个机器上部署,需要通过脚本在 crontab 中新加定时任务 查了下,不同用户的 crontab 在目录 /var/spool/cron/...

693
来自专栏Aloys的开发之路

ssh相关原理学习与常见错误总结

欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinn...

833
来自专栏同步博客

memcached的安装以及php两个扩展软件安装(memcache、memcached)

百度云安装包:http://pan.baidu.com/s/1pKZeDwn  k3ap

602
来自专栏静下来

WordPress密码重设提示“您的密码重设链接无效,请在下方请求新链接”

用Wordpress这么多年,以前从来没有用过用户注册的功能,也就不知道这一块具体是怎么样的。 这几天在改版某个网站的时候,新增了用户注册这一类,然后测试的时候...

2686
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Concourse CI设置持续集成管道

Concourse CI是一个现代的,可扩展的集成系统,旨在通过可组合的声明性语法自动测试管道。

992
来自专栏IT探索

linux命令使用方法

在虚拟机软件的菜单栏中一次选择“虚拟机->设置->选项->共享文件夹”,在右侧选启用或在下次电源关闭或挂起前启用,点击下面的添加,下一步,在主机路径中选中win...

852
来自专栏Seebug漏洞平台

Hacking Aria2 RPC Daemon

Author:ricterz ABSTRACT 在未设置任何安全措施的情况下,Aria2 RPC Server 可以接受任何未知来源的请求指令,并予以下载。即使...

4375
来自专栏同步博客

Git服务器搭建

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计...

673

扫码关注云+社区