https非对称加密及CA证书签名介绍

非对称加密产生的背景:

在网络中,数据在客户端和服务器之间由于是明文传递,一旦网络被人监控,数据就可能一览无余地展现在窃听者面前,为此我们需要将数据加密后再进行网络传输,这样即使数据被窃听,窃听着也无法知道数据的真实内容是什么,但是对于我们的应用层协议而言,如HTTP,FTP等,我们仍然希望能够透明的处理数据,而无需操心网络传输过程中的安全问题。所以提出了SSL,SSL做为一种安全协议,它在传输层提供对网络连接加密的功能。对于应用层而言,它是透明的,数据在传递到应用层之前就已经完成了加密和解密的过程。

OSI七层模型

OSI七层网络模型

TCP/IP四层概念模型  

对应网络协议

应用层(Application)

应用层

HTTP、TFTP, FTP, NFS, WAIS、SMTP

表示层(Presentation)

Telnet, Rlogin, SNMP, Gopher

会话层(Session)

SMTP, DNS

传输层(Transport)

传输层

TCP, UDP

网络层(Network)

网络层

IP, ICMP, ARP, RARP, AKP, UUCP

数据链路层(Data Link)

数据链路层

FDDI, Ethernet, Arpanet, PDN, SLIP, PPP

物理层(Physical)

IEEE 802.1A, IEEE 802.2到IEEE 802.11

1.密钥

TSL/SSL是一个公钥/私钥的结构,它是一个非对称的结构,每个服务器和客户端都有自己的公私钥,公钥用来加密要传输的数据,私钥用来解密接受到的数据。公钥和私钥是配对的,通过公钥加密的数据,只有私钥才能解密,所以在建立安全传输之前,客户端和服务器端之前需要互换公钥,客户端发送的数据需要通过服务器端的公钥进行加密,服务器哦端发送数据时则需要客户端的公钥进行加密。

node在底层采用openssl实现TLS/SSL的,为此要生成公钥和私钥通过openssl完成。

//生成服务器端私钥

$ openssl genrsa -out server.key 1024

//生成客户端私钥

$ openssl genrsa -out client.key 1024

//继续生成公钥

$. openssl rsa -in server.key -pubout -out server.pem

$. openssl rsa -in server.key -pubout -out client.pem

公钥和私钥的非对称加密虽然好,但网络中依然可能存在窃听的情况,客户端和服务器哦在交换公钥的过程中,中间人对客户端扮演服务器的角色,对服务器扮演客户端的角色,因此,数据传输过程中还需要对得到的公钥进行认证,以确认得到的公钥是出自目标服务器。

为了解决这个问题,SSL/TLS引入了数字证书来进行认证。与直接用公钥不同,数字证书中包含了服务器的名称和主机名,服务器的公钥,签名颁发机构的名称,来自签名颁发机构的签名。在通过证书中的签名确认收到的公钥是来自目标服务器的,从而产生信任关系

2.数字证书

为了确保我们的数据安全,现在我们引入了一个第三方:CA,CA作用是为了给站点颁发证书,这个证书具有CA通过自己的公钥和私钥实现的签名

为了得到签名证书,服务器端通过自己的私钥生成CSR(证书签名请求),CA机构通过这个文件颁发给属于服务器的签名证书。

  1. 客户端向服务端打个招呼,并告诉服务端,自己要访问哪个域名(SNI),这一步是不加密的
  2. 服务端向客户端打招呼,出示自己的证书,同时证书中包含了服务端的公钥,这一步也是不加密的
  3. 客户端验证服务端的证书是否合法,如果不合法就中止请求并报错
  4. 客户端生成一个后续使用密钥(用于对称加密),使用服务端的公钥对这个密钥进行加密,发送到服务端
  5. 服务端对上一步客户端发来的加密消息进行解密并验证

            HTTPS握手步骤

猜你喜欢

转载自blog.csdn.net/mrfang1413/article/details/84349081