Android网络基础面试题之HTTPS的工作流程和原理

简介: HTTPS简述HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

工作流程

HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:

1、TCP 三次同步握手

2、客户端验证服务器数字证书

3、DH 算法协商对称加密算法的密钥、hash 算法的密钥

4、SSL 安全加密隧道协商完成

5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。

通信的三方

CA根证书颁发机构、客户端、服务端

CA颁发证书

1、CA给客户端颁发的根证书是CA的公钥,用于验证服务端的证书是否合法,也就是验证服务端的身份信息

2、CA给服务端颁发的证书,也就是电子签名,是CA机构用自己的私钥将服务端的公钥和个人信息加密得到

3、 非对称加密

通信过程

分为:证书验证阶段和数据传输阶段

证书验证阶段

1、 客户端发起请求后,服务端会返回证书信息

2、 客户端收到证书信息后,用本地保存的根证书(也就是CA证书的公钥)进行解密,验证证书的合法性,和服务端的身份,这里是非对称加密

3、 客户端验证过程包括解密证书信息后,用哈希值进行对比,把证书明文内容的哈希值和解密后的签名(是服务端信息的哈希值)进行对比要相同;

4、 此外证书信息里还有服务端的信息,比如域名,通过对比域名可以避免证书被掉包

数据传输阶段

1、 证书验证合法后,客户端会生成一个随机数,通过从服务端证书中解密出的服务端公钥进行加密,传给服务端

2、 服务端用自己的私钥解密出随机数(称作 pre_master_secret 的随机密码串),然后利用随机数和对称加密算法对数据进行加密,然后传输给客户端

3、 客户端根据本地存储的随机数利用对称加密算法对服务端的内容进行解密

从网络模型认识HTTPS

1、应用层(application layer):比如Http、FTP、Https

2、传输层(transport layer):比如TCP、UDP

3、网络层(network layer):比如:IPv4、IPv6

4、 数据链路层(data link layer)和物理层(physical layer):比如无线网的802.2传输协议,有线网的以太网协议

5、SSL/TLS:位于HTTPS的下层

HTTPS的特点

1、安全,大部分情况能避免中间人攻击,防止数据被窃取

2、 HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用

3、 HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

缺点

1、相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗

2、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用

3、最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行

问题

1、 为什么制作数字签名时需要哈希一次?

最显然的是性能问题,前面我们已经说了非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多

2、 每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?

服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了!

3、为什么不用非对称加密+非对称加密?

这种方式防止不了中间人攻击,中间人可以劫持分别得到公钥,然后替换成自己的。需要通过CA机构解决


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
1238 168
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
634 15
|
缓存 Java 数据库
Android的ANR原理
【10月更文挑战第18天】了解 ANR 的原理对于开发高质量的 Android 应用至关重要。通过合理的设计和优化,可以有效避免 ANR 的发生,提升应用的性能和用户体验。
905 56
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
469 9
|
安全 算法 网络安全
一张图就把HTTPS工作原理讲明白了!
【10月更文挑战第31天】
7568 1
一张图就把HTTPS工作原理讲明白了!
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
1187 3
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
563 3
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程