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

相关推荐
lazy H9 小时前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408
低慢小uav10 小时前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
|_⊙13 小时前
应用层协议HTTP与HTTPS
网络·网络协议·http
zxanz113 小时前
证书运维自动化,守住业务 HTTPS 底线
运维·https·自动化
Lsetea14 小时前
Git访问HTTPS证书不受信任:用URL级sslCAInfo限定私有CA范围
git·https·开发工具·ssl证书·ca证书
byte轻骑兵14 小时前
【PBAP】规范精讲[9]: 蓝牙PBAP的互联互通法则——GOEP互操作性要求深度解析
网络协议·人机交互·蓝牙协议·pbap
路由侠内网穿透.14 小时前
本地部署开源 WSGI HTTP 服务器 Gunicorn 并实现外部访问
运维·服务器·网络·网络协议·http·开源
箓维15 小时前
TCP Socket的基础实现
网络·网络协议·tcp/ip
川石课堂软件测试1 天前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
明天也要努力学习1 天前
IP 协议的相关特性
网络·网络协议·tcp/ip