通过Wireshark分析Apache服务器的SSL协议工作过程

news2024/11/25 16:03:10

文章目录

  • 一、实验环境
  • 二、为Apache服务器启用SSL
    • 1.获取SSL证书
    • 2.修改httpd.conf配置文件
    • 3.修改httpd-ssl.conf配置文件
    • 4.启动Apache服务
  • 三、SSL/TLS工作过程分析

一、实验环境

操作系统:macOS Ventura 13.0.1
Apache:Apache/2.4.54 (Unix),此版本为mac系统默认自带的Apache服务器版本
Wireshark:Wireshark 4.0.2

二、为Apache服务器启用SSL

1.获取SSL证书

SSL证书可以通过阿里云SSL证书服务免费购买,但购买后的证书还没有提交到CA中心,需要填写域名、申请人等信息后提交CA中心,待验证通过后签发证书,签发过程大概几分钟就能完成。

证书签发完成后按Apache支持的crt格式下载即可,解压后的文件夹中有3个文件:

  1. 证书文件:以.crt为后缀或文件类型。
  2. 证书链文件:以.crt为后缀或文件类型。
  3. 密钥文件:以.key为后缀或文件类型。

在这里插入图片描述

当然也可以借助于openssl工具在本地生成自签名的SSL证书,但过程较为繁琐而且容易出现问题。

2.修改httpd.conf配置文件

在Apache配置文件目录/private/etc/apache2下,打开httpd.conf文件,进行如下修改:

# LoadModule ssl_module modules/mod_ssl.so  # 删除行首的配置语句注释符号“#”加载mod_ssl.so模块启用SSL服务,Apache默认不启用该模块。
# Include conf/extra/httpd-ssl.conf  # 删除行首的配置语句注释符号“#”。

3.修改httpd-ssl.conf配置文件

在/private/etc/apache2/extra/目录下,打开httpd-ssl.conf文件,在文件中找到以下参数,按照下文中注释内容进行配置。

<VirtualHost *:443> 
    ServerName # 修改为申请证书时绑定的域名。
    DocumentRoot "/Library/WebServer/Documents"
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
    SSLHonorCipherOrder on
    SSLCertificateFile /private/etc/apache2/ssl/9042749_www.atreus.ink_public.crt # 替换成证书文件名。
    SSLCertificateKeyFile /private/etc/apache2/ssl/9042749_www.atreus.ink.key # 替换成证书的密钥文件名。
    SSLCertificateChainFile /private/etc/apache2/ssl/9042749_www.atreus.ink_chain.crt # 替换成您证书链文件名
</VirtualHost>

4.启动Apache服务

通过命令sudo apachectl start即可启动Apache服务,通过https:// + IP即可以SSL访问主页,默认主页位于/Library/WebServer/Documents路径下,可自行修改。

在这里插入图片描述

如果启动失败或页面无法访问,可以查看/private/var/log/apache2/error_log路径下的错误日志进行排查。

三、SSL/TLS工作过程分析

在这里插入图片描述

上图为通过Wireshark抓包的数据,客户端与服务器两台主机位于同一局域网中,其中192.168.0.36:53249客户端套接字,192.168.0.7:443服务器套接字。

最开始的三条数据包实现了TCP的三次握手,这表明TLS以TCP作为基础。其中Seq为序号,Ack为确认号,Win为窗口大小(现在允许对方发送的数据量),Len为TCP数据部分长度,MSS为最大报文段长度,WS表示窗口的放大倍数,SACK_PERM表示通信双方均支持SACK机制。

53294 -> 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM
443 -> 53294 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=64 SACK_PERM
53294 -> 443 [ACK] Seq=1 Ack=1 Win=131328 Len=0

TLS握手与通信阶段报文如下所示,总体上可以分为七步。

192.168.0.36 -> 192.168.0.7    TLSv1.2    Client Hello
192.168.0.7 -> 192.168.0.36    TLSv1.2    Server Hello
192.168.0.7 -> 192.168.0.36    TLSv1.2    Certificate
192.168.0.7 -> 192.168.0.36    TLSv1.2    Server Key Exchange, Server Hello Done
192.168.0.36 -> 192.168.0.7    TLSv1.2    Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
192.168.0.7 -> 192.168.0.36    TLSv1.2    New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
192.168.0.36 -> 192.168.0.7    TLSv1.2    Application Data

第一步,Client Hello。浏览器给出协议版本号客户端生成的随机数客户端支持的加密套件客户端支持的压缩算法。这一步客户端有可能连续发送多个除了端口号和随机数其他信息均一致的Client Hello包,目的是避免超时重传影响用户体验。

在这里插入图片描述

第二步,Server Hello。服务器会确认双方最终使用的TLS版本号加密套件以及其它一些必要信息,同时还会发送一个服务器生成的随机数,这个随机数稍后会用于生成对话密钥。其中TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256表明采用了TLS协议和ECDHE交换算法,并且是RSA公钥加密。

在这里插入图片描述

第三步,Certificate。服务器发送证书给客户端,该证书用于向客户端确认服务器的身份。可以看到,我这里证书申请时用的是域名为www.atreus.ink,和服务器实际域名并不匹配。

在这里插入图片描述

第四步,Server Key Exchange, Server Hello Done。服务器会发送给客户端Diffie-Hellman算法相关参数,如下图中的pubkey参数,这个参数需要通过网络传给浏览器,但即使它被截取也不会影响安全性。通过这些参数后期客户端可以算出会话密钥,传递完参数之后,服务器会告诉客户端Server Hello结束了。

在这里插入图片描述

第五步,Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message。浏览器收到服务器发来的Certificate包之后,运行Diffie-Hellman算法生成一个pubkey,这个pubkey也被称为预备-主密钥,然后这个pubkey会被发送给服务器,服务器结合自己的私钥解出这个预备-主密钥的信息,得到第三个随机数。基于这三个随机数,服务器和客户算就可以生成一个一样的会话密钥用于通信。

在这里插入图片描述

第六步,New Session Ticket, Change Cipher Spec, Encrypted Handshake Message。前五步完成后基本上可以说TLS的握手阶段已经完成了,但是服务器还会发送一个Session Ticket给浏览器,这个Session Ticket包含了它的生命周期(7200s)以及它的id等信息,有了这个Session Ticket之后,如果出于某种原因对话中断,就需要重新握手,而此时客户端只需发送一个服务器在上一次对话中发送过来的Session Ticket就可以继续使用上一次连接了。这个Session Ticket是加密的,只有服务器才能解密,其中包括本次对话的对话密钥和加密方法等信息。

在这里插入图片描述

第七步,Application Data。在TLS握手成功且Session Ticket传递完毕后服务器与客户端就可以进行通信了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

喜提JDK的BUG一枚、多线程的情况下请谨慎使用这个类的stream遍历。

前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候&#xff0c;看到一个 pr&#xff0c;虽说是在 RocketMQ 的地盘上发现的&#xff0c;但是这个玩意吧&#xff0c;其实和 RocketMQ 没有任何关系。 纯纯的就是 JDK 的一个 BUG。 我先问你一个问题&#xff1a;LinkedBlockingQueue…

vue3 antd table表格的样式修改(二)利用rowClassName给table添加行样式

vue3 antd项目实战——修改ant design vue组件中table表格的默认样式&#xff08;二&#xff09;知识调用场景复现修改table表格的行样式一、rowClassName添加行样式二、表格的不可控操作写在最后知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vu…

Autosar MCAL-SPI配置及使用

文章目录前言SPI协议基础Autosar SPI专有名词SpiDriverSpiChannelSpiChannelIdSpiChannelTypeSpiDataWidthSpiDefaultDataSpiEbMaxLengthSpiIbNBuffersSpiTransferStartSpiExternalDeviceSpiBaudrateSpiAutoCalcBaudParamsSpiCsIdentifierSpiCsPolaritySpiCsSelectionSpiDataSh…

前端工程师可以分成 4 种,你属于哪一种?

在这篇文章中&#xff0c;探讨四种常见的前端工程&#xff0c;1&#xff09;产品工程师&#xff0c;2&#xff09;UI 基建工程师&#xff0c;3&#xff09;设计师&#xff0c;4&#xff09;工具基建工程师&#xff0c;你属于哪一种&#xff1f; 产品工程师 产品工程师负责公司…

6.s081 学习实验记录(二)xv6 and unix utilities

文章目录一、boot xv6二、sleep三、pingpong四、primes五、find六、xargs该实验主要用来熟悉xv6以及其系统调用 一、boot xv6 实验目的&#xff1a; 启动xv6系统&#xff0c;并使用提供的命令ls&#xff0c;列出系统所有的文件ctrl p&#xff0c;打印当前运行的进程ctrl a…

Ubuntu22.04使用kubeadm安装k8s 1.26版本高可用集群

目录阿里云ACK集群的架构ACK实例的创建过程如下安装前的准备主机规划基线准备所有k8s master、worker节点安装kubeadmkubectlkubelet创建集群负载均衡器HAproxy安装keepalived 和haproxy配置haproxy配置keepalivedkubeadm部署第一台master节点Calico网络组件一键安装安装完成阿…

mPEG-Biotin,甲氧基-聚乙二醇-生物素科研实验用试剂

​​ 英文名称&#xff1a;mPEG-Biotin 中文名称&#xff1a;甲氧基-聚乙二醇-生物素 mPEG生物素可通过与链霉亲和素和抗生物素结合进行聚乙二醇化&#xff0c;具有高亲和力和特异性。生物素通过稳定的酰胺连接物与线性PEG结合。 提示&#xff1a;避免频繁的溶解和冻干&…

node.js+uni计算机毕设项目基于微信的同学会小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

GraphQL在Django中的使用

简介 特点 请求你所要的数据&#xff0c;不多不少获取多个资源&#xff0c;只用一个请求描述所有的可能&#xff0c;类型系统几乎所有语言支持 谁在用 文档 Graphene-PythonGraphQL | A query language for your API 背景 传统restful的接口定义类型多&#xff0c;试图简…

WordPress 添加百度主动推送代码,加速网站收录保护原创文章

WordPress是世界上使用人数最多开源程序之一&#xff0c;它的优点有很多&#xff0c;譬如&#xff0c;简单易用、样式丰富&#xff0c;模板众多&#xff0c;安全性能高&#xff0c;对搜索引擎友好&#xff0c;收录快、扩展性强&#xff0c;功能强大等等&#xff0c;其中我最喜欢…

JVM的类加载机制

一、类加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中&#xff0c;将其放在运行时数据区的方法区内****&#xff0c;然后在堆区创建一个java.lang.Class对象&#xff0c;用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象&…

六、应用层(三)文件传输协议(FTP)

将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中&#xff0c;是一项基本的网络应用&#xff0c;即文件传送。 文件传送协议FTP&#xff08;File Transfer Protocal&#xff09;是因特网上使用得最广泛的文件传送协议。 FTP提供交互式的访问&#xff0c;允许…

欢祝圣诞——北斗星的爱!

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ ★★给大家推荐两首我很喜欢的歌曲&#xff0c;第一首是标题同名歌曲&#xff1a;1.张杰的《北斗星的爱》&#xff1b;另一首是&#xff1a;2.张杰的《星星》&#xff0c;这两首歌真的很震撼很好听&#xff01; 我…

2022细胞生物学实验原理复习资料汇总

2022细胞生物学实验原理复习资料汇总1.2022年考试复习题及参考答案2.2021年考试复习题及参考答案3.2020年之前考试复习题汇总4.复习重点&#xff08;汇总&#xff09;5.排版好的PDF高清版 获取途径&#xff08;资源2021年版&#xff0c;链接2022年最新版本&#xff09;1.2022年…

Linux网络编程之epoll多路转接服务器

Linux网络编程之epoll多路转接服务器 一、epoll的基本概念 epoll是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率&#xff0c;因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待…

基于自动模糊聚类的图像分割研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

kubernetes之数据存储详解

目录 一、存储卷的作用 二、数据卷概述 三、数据卷emptyDir 四、数据卷hostPath 五、数据卷&#xff1a;NFS 六、持久卷概述 6.1PV静态供给 6.2PV 动态供给(StorageClass) 6.3 PV 生命周期 6.3.1 ACCESS MODES (访问模式) 6.3.2 RECLAIM POLICY (回收策略) 6.3.3 S…

【Redis场景2】缓存更新策略(双写一致)

在业务初始阶段&#xff0c;流量很少的情况下&#xff0c;通过直接操作数据是可行的操作&#xff0c;但是随着业务量的增长&#xff0c;用户的访问量也随之增加&#xff0c;在该阶段自然需要使用一些手段(缓存)来减轻数据库的压力&#xff1b;所谓遇事不决&#xff0c;那就加一…

vue 基础入门:vue 的调试工具

1. 安装 vue-devtools 调试工具 vue 官方提供的 vue-devtools 调试工具&#xff0c;能够方便开发者对 vue 项目进行调试与开发。 Chrome 浏览器在线安装 vue-devtools &#xff1a;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajb…

六、应用层(五)万维网(www)

目录 5.1 WWW的概念与组成结构 5.2 超文本传输协议&#xff08;HTTP&#xff09; 5.2.1 HTTP的操作过程 5.2.2 HTTP的特点 5.2.3 HTTP的报文结构 5.1 WWW的概念与组成结构 万维WWW&#xff08;World Wide Web&#xff09;简称web并非某种特殊的计算机网络。它…