抓包时碰到强制SSL证书双向认证怎么办?

抓包时碰到强制SSL证书双向认证怎么办?,第1张

大家好,我是阿萨。最近碰到使用浏览器使用HTTPS抓包时,抓包工具无法抓包。而且还是使用HSTS的模式以及SSL Pinning 技术。

首先介绍下HSTS:

HSTS(HTTP Strict Transport Security)国际互联网工程组织IETF正在推行一种新的Web安全协议

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

需要详细了解SSL Pinning的,自行搜索。

因为强制使用了自己证书校验,抓包工具的SSL证书就校验不通过了,这时需要将网站证书导入抓包工具中才能正常工作。

那有些人就说了,我没有证书咋办呢?

别急。我们先打开需要抓包的网址。HTTPS的网址前面会有一把锁。点开锁,可以查看证书详情。以Mac 电脑 Chrome 浏览器 Stack Overflow 网站截图为例。

点 Connection is Secure 位置。

点击 Certificate is valid 打开链接。查看证书名称。

打开KeyChain ( 可以直接在浏览器里管理证书位置打开keyChain)。找到对应证书。点击右键,导出你想要的格式

导出证书后,倒入抓包工具的证书管理工具里,重启抓包工具就可以了。

windows导出证书和mac的导出方法不一致。

Windows 的浏览器查看证书位置,可以直接导出证书。

Mac是key chain管理的。

大家赶快试一试吧。

HTTP (HyperText Transfer Protocol, 超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层。这里提一下TCP/IP的分层共分为四层:应用层、传输层、网络层、数据链路层。

分层的目的是:分层能够解耦,动态替换层内协议

各个层包含的内容:

应用层: 向用户提供应用服务时的通讯活动(ftp, dns, http)

传输层: 网络连接中两台计算机的数据传输(tcp, udp)

网络层:处理网路上流动的数据包,通过怎样的传输路径把数据包传送给对方(ip)

数据链路层:与硬件相关的网卡,设备驱动等等

然而HTTP也有以下明显缺点:

1.通信使用明文, 内容可能被窃听

2.不验证通信方的身份, 因此有可能遭遇伪装

3.无法证明报文的完整性,所以有可能遭到篡改

这样, HTTPS就登场了。HTTPS中的S表示SSL或者TLS,就是在原HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,即

加密相关的预备知识:对称加密和非对称加密。

1.对称加密:加密和解密数据使用同一个密钥。这种加密方式的特点是速度很快,常见对称加密的算法有AES;

2.非对称加密:加密和解密使用不同的密钥,这两个密钥形成有且仅有唯一的配对,叫公钥和私钥。数据用公钥加密后必须用私钥解密,数据用私钥加密后必须用公钥解密。一般来说私钥自己保留好,把公钥公开给别人(一般公钥不会单独出现,而是会写进证书中),让别人拿自己的公钥加密数据后发给自己,这样只有自己才能解密。这种加密方式的特点是速度慢,CPU开销大,常见非对称加密算法有RSA。

CA证书的相关知识:

CA证书是由CA(Certificaiton Authority)机构发布的数字证书。其内容包含:电子签证机关的信息、公钥用户信息、公钥、签名和有效期。这里的公钥服务端的公钥,这里的签名是指: 用hash散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,加密完的密文就是签名。即:证书 = 公钥 + 签名 + 申请者和颁发者的信息。客户端中因为在操作系统中就预置了CA的公钥,所以支持解密签名(因为签名使用CA的私钥加密的)

有了这些预备知识后,就可以来看看HTTPS是如何怎么做到安全认证的。

HTTPS单向认证

先来看看单向认证的过程:

从上文可以看出,服务端拥有一对非对称密钥:B_公钥和B_私钥。详细过程如下:

(1) 客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。

(2) 服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端

(3) 客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务器公钥

(4) 客户端发送自己的客户端证书给服务端,证书里面有客户端的公钥: C_公钥

(5) 客户端发送支持的对称加密方案给服务端,供其选择

(6) 服务器选择完加密方案后,用刚才得到的C_公钥去加密选好的加密方案

(7) 客户端用自己的C_私钥去解密选好的加密方案,客户端生成一个随机数(密钥F),用刚才得到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。

(8) 服务器和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/720820.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-08
下一篇2023-08-08

发表评论

登录后才能评论

评论列表(0条)

    保存