网络协议之https?

写在前面

https协议还是挺复杂的,本人也是经过了很多次的学习,依然感觉一知半解,无法将所有的知识点串起来,本次学习呢,也是有很多的疑惑点,但是还是尽量的输出内容,来帮助自己和在看文章的你来共同进步吧!

为了更加系统,行文采用线性的方式来进行,遇到一些点的话再单独展开说明。接下来我们就以https协议本身作为切入点开始吧!

1:https协议的流程

我们静下心来一步步的来看啊。首先客户端给服务端说:您好,我这边的加密套路是这样的,给你个随机数,后面有用,随机数后续使用,这个在https协议里叫client hello,接着服务端回复您好,我这边的加密套路是这样的,也给你个随机数,随机数也是后续使用,这个在https协议里叫server hello,如下方式抓包看下:

抓包看如下:

client hello可以看到加密套件信息:

接着是服务端给客户端发送这是我的证书,你也审核一下吧,这个过程叫client certificate,客户端收到服务端的证书后,通过自己内置的CA证书的公钥来解密信息,如果是能够解密则说明服务端的证书是找了合法的CA机构生成的(合法CA机构的公钥都是公开的,会内置在操作系统中,所以千万不要安装来路不明的操作系统,要不然你银行卡里的13块钱的余额怎么没的都不知道)。其中加密生成签名和验证签名的过程如下图:

这样客户端在验证了服务端的证书后继续后续流程,客户端给服务端发送将随机数字使用公钥加密传输,协议里叫Client Key Exchange,注意这里的公钥是服务端在CA机构签过名的公钥,即和服务端自己维护的私钥是配对的(注意和CA的私钥公钥区分),服务端收到加密的随机数字后,就可以使用自己保密存储的私钥来解密,获取这个随机数字了。接着客户端和服务端会使用前面流程的随机数们计算出相同的密钥,作为后续数据交换对称加密使用的密钥。

获取密钥之后,为了确保各自的密钥好使,会进行一些testing看下,就是下面的交互过程:

最后就是正常加密通信过程了:

关于证书是如何生成的我们在第二部分来看下。

2:证书

在https协议中有一个很重要的角色就是证书,什么是证书呢?证书的作用就是来证明服务的身份,以及服务端公钥的合法性,如果是CA签发的证书的话(背书),就是合法的证书,是能够使用操作系统内置的CA公钥解密的,浏览器会认为是其实安全的,如下:

反之不安全的会提示:

我们来看下这个过程,比如你创建了一个网站现在要使用https的安全传输协议,首先要做的就是生成网站使用的私钥:

复制代码
[root@host-10-150-27-148 x]# openssl
OpenSSL> genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....++++++
....................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
OpenSSL> 

这样网站的私钥就有了(千万要保密保存不要泄露),接着通过私钥生成网站的证书请求文件(里面有网站公钥信息【通过私钥生成】,域名,邮箱等信息【提示我们录入的】),后续需要发送给CA生成签名证书,生成请求文件过程如下:

复制代码
OpenSSL> req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:hc
Organizational Unit Name (eg, section) []:bj
Common Name (eg, your name or your server's hostname) []:dnogdashuaige
Email Address []:3454@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:111111
An optional company name []:dahuyou

接着我们就可以将server.csr交给CA机构生成签名证书了,但是真的生成是要钱的,所以我们这里来模拟。

我们知道CA生成签名也是通过自己的私钥来进行的,所以先来模拟生成私钥等信息:

复制代码
OpenSSL> genrsa -des3 -out ca.key 1024  
Generating RSA private key, 1024 bit long modulus
.......++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

此时还不能签名,还需要通过私钥导出用来给其他公钥生成签名的根证书,如下:

复制代码
OpenSSL> req -new -x509 -key ca.key -out ca.crt -days 365
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:hc
Organizational Unit Name (eg, section) []:bj
Common Name (eg, your name or your server's hostname) []:dahuyou
Email Address []:222@ff.com

这样,一个冒牌的CA就有了,可以使用ca.crt来签名生成证书了。

好,接着来生成证书啦:

复制代码
OpenSSL> x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365
Signature ok
subject=/C=CN/ST=BJ/L=beijing/O=hc/OU=bj/CN=dnogdashuaige/emailAddress=3454@qq.com
Getting CA Private Key
Enter pass phrase for ca.key:

这里生成的server.crt就是在https协议交互过程中服务端给客户端的证书了。

写在后面

参考文章列表

openssl生成自签名证书(完整版)

分布式之拜占庭问题

图文详解HTTPS协议通信全过程,结合抓包实战分析,带你一次看透HTTPS!零基础入门到精通,收藏这一篇就够了

相关推荐
郝亚军16 小时前
Websocket的Key多少个字节
网络·websocket·网络协议
cellurw16 小时前
Day35 网络协议与数据封装
网络·网络协议
筏.k16 小时前
计算机网络:概述层---TCP/IP参考模型
网络协议·tcp/ip·计算机网络
猫猫不是喵喵.17 小时前
高效菜单管理页面:一键增删改查
网络·websocket·网络协议
奋斗的老史17 小时前
内网的应用系统间通信需要HTTPS吗
网络协议·http·https
不会叫的狼17 小时前
https + 域名 + 客户端证书访问模式
https
GHOME18 小时前
复习-网络协议
前端·网络协议·面试
数智顾问19 小时前
Trae + MCP : 一键生成专业封面的高阶玩法——自定义插件、微服务编排与性能调优
网络·http·https
奇树谦20 小时前
Git配置:禁用全局HTTPS验证
git·网络协议·https