https工作原理和流程 (http和https原理)

我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。其所用的端口号是443。

SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。

1、加解密算法:

有两种基本的加解密算法类型:

1)、对称加密(symmetrcic encryption):密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;

对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。

2)、非对称加密:使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。

这种密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

2、https的通信过程

下面看一下https的通信过程:

http和https原理,nginxhttp转https原理

过程大致如下:

1、tcp连接和获取证书:

SSL客户端通过TCP和服务器建立连接之后(443端口),并且在一般的tcp连接协商(握手)过程中请求证书。

即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个数据包,这数据包里面确定了这次通信所需要的算法,然后服务器将自己的身份信息以证书的形式发回客户端。证书里面包含了服务器信息:域名或者服务地址、加密公钥、以及证书的颁发机构。

2、Client在收到服务器返回的证书后处理:

1)验证证书的合法性:颁发证书的机构是否合法、并使用这个机构的公共秘钥确认签名是否有效,确保证书中列出的域名就是它正在连接的域名。如果是浏览器客户端,若证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。

2) 如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后发送给服务器。

3、服务端接收客户端发来的数据之后要做以下的操作:

使用自己的私钥将信息解密取出密码,使用密码解密客户端发来的握手消息,并验证HASH是否与浏览器发来的一致。

使用密码加密一段握手消息,发送给客户端。客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。

4、之后所有的通信数据将由之前浏览器生成的随机密码并利用加密算法进行加密。

https通信的优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的

3、非对称加密算法RSA的加密解密原理

http和https原理,nginxhttp转https原理

1、每个用户都有一对私钥和公钥。

私钥用来进行解密和签名,是给自己用的。

公钥由本人公开,用于加密和验证签名,是给别人用的。

2、当该用户发送文件时,用私钥签名,别人用他给的公钥解密,可以保证该信息是由他发送的。即数字签名。

3、当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他看到。即安全传输。

4、数字证书CA

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和*载下**,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥

5、CA认证流程

http和https原理,nginxhttp转https原理

SSL双向认证步骤:

HTTPS通信双方的服务器端向CA机构申请证书,CA机构是可信的第三方机构,它可以是一个公认的权威的企业,也可以是企业自身。企业内部系统一般都使用企业自身的认证系统。CA机构下发根证书、服务端证书及私钥给申请者;

HTTPS通信双方的客户端向CA机构申请证书,CA机构下发根证书、客户端证书及私钥各申请者;

客户端向服务器端发起请求,服务端下发服务端证书给客户端。客户端接收到证书后,通过私钥解密证书,并利用服务器端证书中的公钥认证证书信息比较证书里的消息,例如域名和公钥与服务器刚刚发送的相关消息是否一致,如果一致,则客户端认为这个服务器的合法身份;

客户端发送客户端证书给服务器端,服务端接收到证书后,通过私钥解密证书,获得客户端的证书公钥,并用该公钥认证证书信息,确认客户端是否合法;

客户端通过随机秘钥加密信息,并发送加密后的信息给服务端。服务器端和客户端协商好加密方案后,客户端会产生一个随机的秘钥,客户端通过协商好的加密方案,加密该随机秘钥,并发送该随机秘钥到服务器端。服务器端接收这个秘钥后,双方通信的所有内容都都通过该随机秘钥加密;

http和https原理,nginxhttp转https原理

- END -

作者:架构精进之路,专注软件架构研究,技术学习与个人成长,关注并私信我回复“01”,送你一份程序员成长进阶大礼包。

Thanks for reading!