网络协议之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!零基础入门到精通,收藏这一篇就够了

相关推荐
2301_780789661 小时前
高防 IP 的选择与配置确保业务稳定性
网络·网络协议·tcp/ip
❆VE❆4 小时前
WebSocket与SSE深度对比:技术差异、场景选型及一些疑惑
前端·javascript·网络·websocket·网络协议·sse
科技块儿4 小时前
反羊毛实战复盘:IP查询+设备指纹联动风控方案
网络·网络协议·tcp/ip
掘根4 小时前
【仿Muduo库项目】HTTP模块3——HttpContext子模块
网络·网络协议·http
小李独爱秋6 小时前
计算机网络经典问题透视:TLS协议工作过程全景解析
运维·服务器·开发语言·网络协议·计算机网络·php
不穿格子的程序员7 小时前
计算机网络篇1:OSI + HTTP进化史 + 三次握手四次挥手
网络协议·计算机网络·http
常温5107 小时前
关于网卡如何给CPU减负方法及策略
网络协议·tcp/ip·udp
莫小墨8 小时前
Modbus协议
网络协议
汤愈韬8 小时前
防火墙双机热备技术之VRRP
网络·网络协议·网络安全·security·huawei
北京耐用通信8 小时前
告别通信干扰与距离限制:耐达讯自动化Profibus总线光纤中继器赋能伺服驱动器稳定连接
人工智能·科技·网络协议·自动化·信息与通信