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

相关文章

来自专栏张善友的专栏

开源.NET邮件服务器

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

3197
来自专栏前端笔记

【HTTP2.0 协议】就“腾讯云 CDN 针对 HTTP 2.0全面公测”浅谈如何启用 HTTP 2.0协议?

HTTPS 是指超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种在 HTTP 协议基础上进行传输加密的安全协...

4929
来自专栏程序手艺人

mbed TLS 简明教程(一)

3155
来自专栏mukekeheart的iOS之旅

iOS学习——如何在mac上获取开发使用的模拟器的资源以及模拟器中每个应用的应用沙盒

如题,本文主要研究如何在mac上获取开发使用的模拟器的资源以及模拟器中每个应用的应用沙盒。做过安卓开发的小伙伴肯定很方便就能像打开资源管理器一样查看我们写到手...

3047
来自专栏张戈的专栏

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

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

3764
来自专栏逸鹏说道

上传文件的陷阱

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

3417
来自专栏lestat's blog

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

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

5624
来自专栏闻道于事

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

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

1641
来自专栏张戈的专栏

CCKiller:Linux 轻量级 CC 攻击防御工具

很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了。博客从此走上了经常被人拿来练手的不归之路。当然,还是有不少朋友在生产环境使用,并...

1.3K0
来自专栏流柯技术学院

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

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

1141

扫码关注云+社区