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

相关文章

来自专栏dalaoyang

利用nginx,腾讯云免费证书制作https

之前一直在研究,https怎么弄。最近看到了腾讯云提供的免费得ssl证书,寻思把网站弄成https。 首先先去腾讯云购买一个免费得证书。 ? 点击后填写内容, ...

51713
来自专栏Huramkin的归档库

SSH快速登录服务器

平时有许多服务器需要通过终端进行管理,如果每次都使用ssh username@ipdomain这种命令会显得麻烦,效率低下而且还需要每次输入密码。所以这里要说的...

1531
来自专栏开发技术

详细的最新版fastdfs单机版搭建

  目前项目是tomcat单机部署的,图片、视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片、视频的,这让我非常担忧;文件服务器的应用是必...

2231
来自专栏Jerry的SAP技术分享

Red Hat Enterprise Linux(RHEL)中yum的repo文件详解

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于...

1242
来自专栏俗人笔记

如何免费将网站升级到HTTPS

由于HTTPS可以防止页面被中间人攻击、确保数据传输过程不被篡改,保证内容完整性。所以升级网站到HTTPS是大的趋向。像苹果AppStore已经禁止使用HTTP...

2446
来自专栏张善友的专栏

CentOS 7 上部署Mono 4 和Jexus 5.6

概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus、 mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net ...

2057
来自专栏电光石火

重置网卡命令

前几天有人问我网络被篡改了怎么办? 我在这里分享一下重置网卡命令 1开始→运行→输入:CMD 点击确定(或按回车键),打开命令提示符窗口。 ...

2175
来自专栏吴伟祥

什么是 WinSCP 转

WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制...

771
来自专栏惨绿少年

linux中的权限

第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LO...

1930
来自专栏青玉伏案

iOS开发之使用XMPPFramework实现即时通信(一)

关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互...

18110

扫码关注云+社区