看到这个标题,很多老手都会斩钉截铁的说,我可以回答这个问题!HTTPS用于安全传输。是的,它很棒。你知道HTTPS底层是如何保障数据安全的吗?进入我们今天的话题介绍:HTTPS是如何实现安全数据传输的。HTTPS认知HTTPS实际上是由HTTP+SSL协议组成的安全协议。我们知道,从我们的URL输入到页面渲染的过程是应用在HTTP协议上的。HTTP协议保证了我们网络传输数据的基础,但是安全性得不到保证,而SSL协议可以通过作用于Http协议来解决安全问题。HTTPS保证以下三点:数据内容加密数据完整性保护(数字摘要、数字签名)身份认证HTTPS保证安全关键点:握手阶段:使用非对称加密技术对公钥进行加密传输阶段:使用对称加密技术来因为HTTPS多了一层加密,使用非对称加密算法对公钥进行加密,建立连接的时间比HTTP慢。握手阶段确保连接是安全的,后续的数据传输才能安全传输。因此,可以采用耗时较少的对称加密算法对消息的传输进行加密。HTTPS的解构:在上图中,我们看到了SSL协议的作用。在了解保证数据安全的SSL协议之前,我们先了解一下数据安全涉及的一些概念。加解密相关概念1、对称加密别名:私钥加密,单密钥算法,传统加密算法。概念:指加密和解密使用相同的密钥,因此可以从加密密钥推导出解密密钥,也可以从解密密钥推导出加密密钥。常见的对称加密算法:DES(数据加密标准)、AES(高级加密标准)、RC4、IDEA2。非对称加密别名:公钥加密概念:公钥对公众公开,私钥保存在通信的两端手中。里面。客户端用加密后的公钥组成一对密钥对,服务端用加密后的公钥组成另一对密钥对。加解密密钥成对限制:加密内容的长度不能超过公钥的长度3.数字摘要别名:数字指纹概念:由单次生成的一串固定长度(128位)的密文。item明文哈希函数。4、数字签名的概念:非对称密钥加密技术与数字摘要的混合应用(1)在数字签名过程中,发送方使用哈希函数(H)从原文生成数字摘要A。发送方使用自己的私钥生成数字摘要AEncrypt,生成密文CypherA,将密文CypherA连同原文发送给接收方(2)数字签名验证(信息完整性)过程,接收方使用Hash函数(H)生成数字摘要B(B===A,H函数相同)接收方使用公钥对收到的加密密文(CypherA)进行解密,得到数字摘要B',比较B'和B是否正确平等的。如果相等,说明接收到的信息是完整的,消息确实是发送方签名发送的(因为只有发送方知道私钥),在传输过程中没有被修改;否则,信息被修改。最后比较数字摘要A与数字摘要A'是否相等,也可以反向使用Hash()函数还原摘要A'得到明文,比较改变后的明文是否与原文一致(都是猪)。数字签名是一个加密过程,而数字签名验证是一个解密过程。数字签名涉及散列函数、接收方的公钥和发送方的[私钥]。(3)伪代码//单项哈希函数fucntionHash(plainText){//传入明文参数//ConstencryptencryptedAbstract=encrypt(plainText)//返回一个定长(128位)的数字摘要returnencryptedAbstract}//Sender使用自己的私钥对明文生成的数字摘要进行加密生成密文doEncrypt(senderPrivateKey,encryptedAbstract)//加密返回{CypherText:CypherA,originText:plainText}}//接收方使用公钥解密函数doDecrypt(publicKey,encryptedAbstract){constdecryptdecryptedAbstract=decrypt(publicKey,encrypted/AbstractedAbstract)ndreceive)消息functionreceiveMessage(CypherA,plainText){constencryptedAbstract=Hash(plainText)constdecryptedAbstract=doDecrypt(publicKey,encryptedAbstract)//decryptif(decryptedAbstract===encryptedAbstract){console.log('1,thesenderistrue')//消息发送者确认console.log('2,themessageiscomplete')//消息完整性确认}}constmessage=sendMessage(plainText)//数字签名过程receiveMessage(message.CypherText,message.originText)//数字签名鉴权过程5.数字证书在上面的数字签名过程中,我们如何保证公钥是可信的?这就是数字证书存在的必要性数字证书主要用于加密、签名、身份认证。数字证书由证书颁发机构(CA,CertificationAgent)颁发。CA在颁发证书之前和使用证书时都会验证持有者的身份。它使客户端能够识别公钥是否来自合法服务器。证书颁发机构(CA)颁发包含公钥和所有者身份的数字证书。匹配的私钥不会公开,而是由生成密钥对的最终用户保密。证书也是CA对证书中包含的公钥属于证书中标识的个人、组织、服务器或其他实体的确认或验证。CA在此类方案中的义务是验证申请人的凭据,以便用户和依赖方可以信任CA证书中的信息。当您访问使用HTTPS(安全连接)的网站时,该网站的服务器会使用证书向Chrome等浏览器证明该网站的身份。证书中包含的公钥信息是可信的。如果证书不存在、证书被篡改或证书无效,浏览器会在左上角提示您网站不安全。签名验证链:client<-server<-CA数字证书内容:证书颁发机构名称、证书本身的数字签名、公钥证书的持有者、公钥签名使用的Hash算法certificate...等公钥和数字签名理解说完这些基本概念,进入我们今天的话题:SSL协议是如何保证数据传输安全的。SSL/TLS1。SSL(SecureSocketLayer,安全套接字层)采用加密技术确保数据在网络传输过程中不被窃取。2.TLS(传输层安全)用于在两个应用程序之间提供机密性和数据完整性。该协议基于SSL3.0协议,可以理解为SSL3.1版本。只是在SSL3.0的基础上采用了一些更安全的策略,使数据更安全,其他协议层和功能与SSL保持一致。有兴趣的可以了解一下它和SSL的区别和优势。SSL/TLS协议的作用:数据加密,防止窃取,保护数据的完整性,保证数据不被更改身份认证,保证数据被发送到正确的客户端和服务器端看到,这正是HTTPS协议所做的三点。那么,SSL协议是如何加密我们的数据进行安全传输的呢?3.SSL和TLS的握手过程(1)客户端通知服务器端自己支持的安全协议版本(如TLS1.0)、加密算法、压缩方式、随机数CRandom1;(2)服务器先响应,返回给客户端安全协议的版本、加密算法、压缩方式、随机数SRandom、数字证书(服务器证书);(3)客户端终端验证服务器发送的证书。验证通过后,进行如下操作:客户端再次生成随机数CRandom2并使用服务器证书中的公钥加密数据,生成随机数CRandom3并发送ChangeCipherSpec(编码改变)消息通知(通知服务器我准备用我们之前协商好的密码套件加密传输数据),之前所有消息的哈希值和加密后的数据CRandom3用于服务器验证使用与服务器确认的加密算法对CRandom1,CRandom2,CRandom3三个随机数加密生成一个SessionSecret(这是后面使用对称加密算法传输数据时使用的对称加密密钥,也可以用于会话恢复,节省SSL握手时间)(4)服务器再次响应:使用自己的私钥解密CRandom3,并验证解密后的数据发送ChangeCipherSpec(编码变化)messagenotification(通知客户端我也准备使用我们之前讨论的加密套件和SessionSecret来加密数据)使用SessionSecret加密一条Finished消息发送给客户端验证加解密通道是否通过建立握手成功。至此四步,客户端和服务端确定了密钥,消息就可以加密传输了。至此,握手过程结束。整个握手阶段的安全性取决于第三个随机数CRandom3能否被破解,因为这个随机数是用服务器的公钥加密,用服务器的私钥解密的;并且私钥仅存储在服务器本身上。在所有握手阶段完成后,可以使用对称加密传输应用程序数据。QA1。客户端如何验证收到的证书?证书本身告诉客户端如何验证证书的真实性。即证书说如何根据证书的内容生成证书编号。客户端收到证书后,根据证书上的方法自行生成一个证书号。如果生成的证书编号与证书上的证书编号相同,则表示该证书是真实的。2、公钥的安全性是通过证书来确认的,但是证书是由签发机构签发的,那么如何确认签发者是可信的呢?通过证书链。root:根证书,由权威证书颁发机构(CA,CertificateAuthority)颁发的数字证书,即对自身进行认证。上图中,根证书是由DigiCertGlobalRootCA自己颁发的。intermediates:中间证书,根CA生成一对公钥和私钥,用私钥“加密”中间CA的信息和公钥生成签名,封装中间证书。需要注意的是,中间CA可能不止一个。上级CA也按照这个逻辑给下级CA颁发证书。这里的中间CA是RapidSSLRSACA2018,为终端用户颁发证书。end-user:最终用户(证书)。图中终端证书为*.juejin.im使用的数字证书。可以看出,证书链是由多个证书逐层组成的。终端证书的公钥用于为用户加密消息,其他层证书中的公钥用于解密下一层证书的指纹签名。最高层的根证书是自签名的,也就是发给自己的,所以根证书必须是可信的(你就不能相信自己吗?^^)综上所述,网络上数据的安全传输依赖于SSL协议,而网络传输的协议是HTTP,这样就组成了HTTPS协议。但是,HTTPS必须使用对称加密算法来保证客户端和服务器之间高效的通信安全。但是协商对称加密算法的过程需要使用非对称加密算法来保证安全性。但是,直接使用非对称加密的过程本身并不安全。公钥存在被中间人篡改的可能,因此客户端和服务端不直接使用公钥,而是使用数字证书颁发机构颁发的证书,以保证非对称加密过程本身的安全性。这样,通过这些机制协商出一个对称加密算法,双方使用这个算法对数据进行加密、解密和传输,从而解决了客户端和服务器之间的通信安全问题。
