一 什么是 HTTPS
前面我们看到HTTP 有很多安全问题,因此引出了 对称加密 和 不对称加密。
那么这个对称加密和不对称加密,我们怎么和HTTP结合起来呢?HTTPS 就是弄好的 HTTP 和 加密结合的协议。
通过HTTP加密后的数据,整个传输过程中 请求报文 和 响应报文 所有的东西都是加密的。
也就是说:请求行,请求头,请求体,状态行,回复头,回复体 都是加密的
二 什么是 SSL/TLS 协议 ,TLS 是 SSL 升级后的名字
三. TLS 协议 工作在那一层
四 。OpenSSL 是 SSL/TLS协议的开源实现。
五。重点 HTTPS 的通讯过程
六 TLS 1.2 的连接过程
1. client hello 是浏览器发送给服务器的第一条信息,包括我的TLS版本,客户端的随机数,客户端支持的加密组件
是客户端发送给 服务器的第一条信息,里面存储的当前浏览器的 对于 TLS的支持情况。
当前的浏览器使用的TLS 版本是1.2,
我发送给你的 随机数是 Random Bytes: d5b62595427fa641557ee9d4ef5d83eca2619b2e3fe253dae25d85df
我支持的的 加密组件列表有 16组
使用wireshark 的 捕获 过滤器,注意语法,和显示过滤器的语法不一样
由于https 的端口是443,因此我们port 要等于443
我们访问www.baidu.com 抓到的包分析
注意这是 客户端浏览器发送给 baidu 服务器的。在发送 client hello 的时候,我们告诉baidu 的服务器:
当前的浏览器使用的TLS 版本是1.2,
我发送给你的 随机数是 Random Bytes: d5b62595427fa641557ee9d4ef5d83eca2619b2e3fe253dae25d85df
我支持的的 加密组件列表有 16组
Cipher Suites (16 suites)Cipher Suite: Reserved (GREASE) (0x5a5a)Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301)Cipher Suite: TLS_AES_256_GCM_SHA384 (0x1302)Cipher Suite: TLS_CHACHA20_POLY1305_SHA256 (0x1303)Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9)Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
实际上,发送给服务器端 client hello 后,服务器端会立即回复一个 ack ,这个在PPT 中并没有显示出来,这里知道就好
2. server hello 是服务器发送给客户端浏览器的信息,包括我的TLS版本,服务器端的随机数,服务器端从客户端端传递过来的加密组件中选择的一种加密方式
版本号
Version: TLS 1.2 (0x0303)
随机数:
Random: 66bc17ae770ed0e9e115d372a6eb527a875334bf53e7f71ad4fdba0479a34470
从客户端传递的加密列表中 选择一种 加密组件作为 服务器端和 客户端 的加密规则:
加密组件是一组加密规则的 统称
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
3. Certificate,从服务器发送过来的公钥证书(该证书被CA签名过)
4. Server Key Exchange
将 实现加密算法的一个参数传递给 客户端
第三步和第四步和第五步的数据是一次发过来的
5. server hello done
截止第五步完成我们已经得到了如下的信息
6.clientKey Exchange
将 实现加密算法的一个参数传递给 服务器端
截止第六步完成,就有了会话密钥
7.change Cipher spec
第七步 客户端 浏览器 告诉 服务器 之后的通讯我们会通过 会话密钥 进行通讯,仅仅是一个通知
8.finished
第八步的作用是 校验。
会将前面的
9.change Cipher spec
第9步 服务器 告诉 浏览器 客户端 之后的通讯我们会通过 会话密钥 进行通讯,仅仅是一个通知
10.finished
然后效验
那么下来的通讯就是可以使用加密的通讯了
使用wireshark部分解密HTTPS
把服务器改成 https- 配置HTTPS,使用java 工具生成 证书,并改送tomcat 的 server.xml文件
keytool 是 java bin 目录下自带的一个工具
将生成的mj.jks 文件放在 tomcat 的conf 目录下,并改动server.xml文件