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 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

上传文件的陷阱

0x00 背景 现在很多网站都允许用户上传文件,但他们都没意识到让用户(或攻击者)上传文件(甚至合法文件)的陷阱。 什么是合法文件? 通常,判断文件是否合法会透...

3527
来自专栏python爬虫实战之路

知乎模拟登陆

经常在简书上写作,写完后再发布到其他网站,非常麻烦,所以准备搞一下自动发布文章的工具。那么第一步先要模拟登陆几个网站。今天先从知乎开始。

1553
来自专栏lestat's blog

certbot+letsencrypt配置免费单证书多域名ssl证书

前些天看到微信公众平台官方公告关于公众平台接口不再支持HTTP方式调用的公告之后决定把项目的协议从http改成https,于是开始在网上查,完成之后总结了一点经...

7384
来自专栏PHP实战技术

思梦PHP-阿里大鱼手机验证码

小伙伴是否做PC网站的时候,是否遇到过注册用户需要使用短信验证的功能呢?或者找回密码,以及验证用户的信息等等功能!今天思梦PHP就为大家带来Th...

4876
来自专栏张善友的专栏

开源.NET邮件服务器

LumiSoft Mail Server是一个开源,免费的邮件服务器,能运行在.net/mono上,支持SMTP/POP3/IMAP4/WebMail,支持MS...

4817
来自专栏张戈的专栏

启用某些Linux发行版的root帐号

跟了我 5 年多的本本已步入花甲,CPU 严重老化,运行 Windows 异常吃力,于是考虑换成 Linux 试试。忙活了一天,测试了 2 个“家用”Linux...

4154
来自专栏游戏杂谈

Flash Builder无法正常启动应用程序的原因

去掉编译器参数就可以了, 因为Flash Builer默认使用的是SDK 4.0,而目前开发中只需要使用3.5就可以了,加那个参数

2001
来自专栏闻道于事

前后端分离之JWT用户认证(转)

在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个requ...

2191
来自专栏张首富-小白的成长历程

CentOS使用SMTP第三方发送邮件

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送...

2792
来自专栏流柯技术学院

通过Google身份验证器加强Linux帐户安全

而后,google的验证模块就会被复制到/lib64/security目录下,而用来生成密钥的可执行程序:google-authenticator,则复制到/u...

1541

扫码关注云+社区

领取腾讯云代金券