文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

面试官:你了解数据安全传输吗?

2024-12-10 16:14

关注

对,很优秀,那你知道 HTTPS 底层是如何对数据进行安全保障的吗?下面就进入我们今天的主题介绍:HTTPS 是如何实现数据安全传输的。

[[343999]]

HTTPS 认知

HTTPS 其实是 HTTP + SSL 协议组成的安全协议。

我们知道,从我们输入 URL 到页面呈现的过程是作用于 HTTP 协议的,HTTP 协议保证我们网络传输数据的基础,但是安全性无法保证,而 SSL 协议作用于 Http 协议就能解决安全问题。

HTTPS 保证以下三点:

HTTPS 保证安全性要点:

由于 HTTPS 多了一层使用非对称加密算法对公钥进行加密的过程,因此建立连接的时间比 HTTP 要慢。

握手阶段保证了连接是安全的,那么后续的数据传输就可以安全的进行传输,因此可采用耗时较少的对称加密算法对报文进行加密传输。

HTTPS 解构:

在上图中,我们看到 SSL 协议的作用,在了解保证数据安全的 SSL 协议之前,我们先了解一些关于数据安全涉及的一些概念。

加解密相关概念

1. 对称加密

别名: 私钥加密、单密钥算法、传统密码算法。

概念: 指使用 相同的密钥 进行加解密,因此从加密密钥可以推算出解密密钥,也可以从解密密钥推算出加密密钥。

常见的对称加密算法: DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA

2. 非对称加密

别名: 公钥加密

概念: 公钥是对外公开的,私钥存储在通信两端的各自手里。客户端跟加密的公钥形成一对密钥对, 服务端跟加密的公钥形成另外一对密钥对,加解密的密钥是成对的

限制: 加密内容的长度不能超过公钥的长度

3. 数字摘要

别名: 数字指纹

概念: 明文采用单项 Hash 函数生成的一串固定长度(128 位)的密文。

4. 数字签名

概念:非对称密钥加密技术和数字摘要的混合应用

(1) 数字签名过程

(2) 数字签名验证(信息的完整性)过程

最后比较数字摘要 A 与数字摘要 A'是否相等,也可以逆向使用 Hash()函数,将摘要 A'进行还原得到明文,比较改明文与传过来的原文是否一致(都是 pig)。

数字签名是个加密的过程,数字签名验证 是个解密的过程。一次数字签名涉及到一个哈希函数、接收者的公钥、发送方的[私钥]。

(3) 伪代码

  1. // 单项 Hash 函数 
  2. fucntion Hash (plainText) { // 传入明文参数 
  3.   // 明文加密过程 
  4.   const encryptencryptedAbstract = encrypt(plainText) 
  5.   // 返回固定长度(128 位)的数字摘要 
  6.   return encryptedAbstract 
  7.  
  8. // 发送者使用自己的私钥对明文产生的数字摘要进行加密, 生成密文 CypherA 
  9. function doEncrypt (senderPrivateKey, encryptedAbstract) { 
  10.   const CypherA = encrypt(senderPrivateKey, encryptedAbstract) 
  11.   return CypherA 
  12.  
  13. // 发送报文 
  14. function sendMessage (plainText) { 
  15.   const encryptedAbstract = Hash(plainText) 
  16.   const CypherA = doEncrypt(senderPrivateKey, encryptedAbstract) // 加密 
  17.   return { 
  18.     CypherText: CypherA, 
  19.     originText: plainText 
  20.   } 
  21.  
  22. // 接收者用公钥解密 
  23. function doDecrypt (publicKey, encryptedAbstract) { 
  24.   const decryptdecryptedAbstract = decrypt(publicKey, encryptedAbstract) 
  25.   return decryptedAbstract 
  26.  
  27. // 接收报文 
  28. function receiveMessage (CypherA, plainText) { 
  29.   const encryptedAbstract = Hash(plainText) 
  30.   const decryptedAbstract = doDecrypt(publicKey, encryptedAbstract) // 解密 
  31.   if (decryptedAbstract === encryptedAbstract) { 
  32.     console.log('1、the sender is true') // 消息发送者的确认 
  33.     console.log('2、the message is complete') // 消息完整性的确认 
  34.   } 
  35.  
  36. const message = sendMessage(plainText) // 数字签名过程 
  37. receiveMessage (message.CypherText, message.originText) // 数字签名认证过程 

5. 数字证书

在上述数字签名的过程中,我们如何保证这个公钥是可信任的?这就是数字证书存在的必要性。

数字证书主要用于加密、签名、身份认证。

数字证书由证书颁发机构(CA, Certification Agent) 颁发, CA 会在颁发证书之前以及使用证书时对持有者的身份进行验证,它让客户端有能力去识别公钥是否来自合法的服务器。

证书颁发机构(CA) 颁发包含公钥和所有者身份的数字证书。匹配的私钥不是公开的,而是由生成密钥对的最终用户保密。证书还是 CA 的确认或验证,证书中包含的公钥属于证书中标注的个人,组织,服务器或其他实体。CA 在此类方案中的义务是验证申请人的凭证,以便用户和信赖方可以信任 CA 证书中的信息。

当您访问使用 HTTPS(安全连接)的网站时,该网站的服务器会使用证书向浏览器(如 Chrome)证明该网站的身份。证书中包含的公钥信息是可信任的, 如果证书不存在、证书被篡改、证书失效等情况,浏览器会在左上角提示你该网站不安全。

签名验证链条:client <- 服务器 <- CA

数字证书的内容:

公钥和数字签名

了解这些基本概念后, 进入我们今天的主题:SSL 协议如何保障数据安全传输。

SSL/TLS

1. SSL(Secure Socket Layer, 安全套接字层)

利用加密技术,确保数据在网络传输过程中不会被窃取。

2. TLS (Transport Layer Security,传输层安全协议)

用于两个应用程序之间提供保密性和数据完整性。

该协议建立在 SSL3.0 协议的基础之上,可理解为 SSL3.1 版本。只不过在 SSL3.0 的基础上采用了一些更安全的策略,让数据更加安全,其他的协议分层与功能与 SSL 一致。有兴趣的可自行了解其与 SSL 的区别与优势。

SSL/TLS 协议的作用:

可以看到, 这正是 HTTPS 协议发挥作用的三点。

那么, SSL 协议到底是如何把我们数据进行加密,从而进行安全传输的呢?

3. SSL、TLS 的握手过程

(1) 客户端告知服务端自己支持的 安全协议版本(如 TLS1.0)、加密算法、压缩方法、随机数 CRandom1;

(2) 服务端首次响应,返回给客户端 安全协议的版本、加密算法、压缩方法、随机数 SRandom, 还有一个 数字证书(服务器证书);

(3) 客户端对服务端发送过来的证书进行验证,验证通过后,进行如下操作:

(4) 服务器再次响应:

到上面四步,客户端与服务器已经确定了密钥,就可以对消息进行加密传输了。

到此,握手过程结束。

整个握手阶段的安全,取决于第三个随机数 CRandom3 能否被破解,因为这个随机数是使用服务端的公钥进行加密的、服务端的私钥进行解密的;而私钥只存储在了服务端本身。

在所有的握手阶段都完成之后,就可以使用对称加密技术开始传送应用数据了。

QA

1. 客户端如何对接收到的证书进行验证的?

证书本身就已经告诉客户端怎么验证证书的真伪。也就是证书上写着如何根据证书的内容生成证书编号。客户端拿到证书后根据证书上的方法自己生成一个证书编号,如果生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的。

2. 公钥的安全性是通过证书来确认的, 但是证书是由颁发机构来颁发的, 那如何确认这个颁发者是可信的呢?

通过证书链。

可以看到证书链由多个证书一层一层组成的。末端证书的公钥是给用户加密报文外,其他层证书中的公钥均用于解密下一层的证书指纹签名。最高层的根证书是自签名的,也就是自己颁发给自己,所以 根证书一定是可信的(难道自己还不能信任自己吗?^^)

总结

网络安全传输数据依赖 SSL 协议,而网络传输的协议是 HTTP, 因此构成了 HTTPS 协议。而 HTTPS 要保证客户端与服务器端的高效通信安全,必须使用对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。

这样通过这些机制协商出一个对称加密算法,就此双方使用该算法对数据进行加密解密传输,从而解决了客户端与服务器端之间的通信安全问题。

 

来源:微医大前端技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯