http与https初探
http#
http(超文本传输协议)是应用层通讯协议,http将数据转送给下层的tcp。客户端与服务端之间通过http协议进行传输时数据都是以明文的形式存在,攻击者很容易就可以在传输过程中截获传送的数据这样是很不安全的。
http向https演化的过程#
为了解决上述过程中明文传输的问题,通过对称加密算法对传输中的数据进行加密。但是因为对称加密中加密与解密使用相同的密钥,密钥很难进行管理,密钥一旦泄露攻击者很容易将传输中的数据进行解密。
所以针对对称加密中密钥维护困难的问题采用非对称加密进行数据的传输。
- 客户端通过公钥加密数据发送给服务端
- 服务端通过私钥解密数据,然后再通过私钥加密回传数据。
- 客户端得到回传数据通过公钥进行解密
这就产生了一个新的问题,当客户端得到回传数据的过程中,因为非对称加密的公钥的公开的,所以攻击者可以拦截服务端回传的数据并通过公钥对数据进行解密。
针对对称加密中密钥的管理问题和非对称加密中公钥公开的问题提出了新的解决方法,就是对称加密 + 非对称加密。
- 客户端生成一个随机数作为对称密钥,然后通过非对称加密的公钥将对称密钥加密传输给服务端。
- 服务端通过非对称加密的私钥对传输数据进行解密后得到对称密钥
- 后续客户端与服务端之间进行通讯就使用此对称密钥进行,也就是还是采用对称加密进行传输,这里非对称加密存在的意义就是解决对称密钥的管理问题。
现在有个问题是客户端的公钥是怎么获取的,因为非对称加密的公钥和私钥是成对的,不同服务器的私钥会有对应的公钥,所以公钥一般是由服务端发送给客户端的。
那么客户端如果确定接收到的公钥一定是服务器回传的呢,如果攻击者代理回传自己的公钥,这样当客户端利用攻击者的公钥加密对称密钥并再次发送给攻击者的代理时,攻击者利用自己的私钥解密获得对称密钥就可以对后续客户端和服务端的通讯进行解密。(中间人攻击
为了解决服务端可信的问题有了https协议。
https#
https为了解决服务端可信的问题使用了SSL证书验证。服务端在发送给客户端公钥的时候实际是将公钥放在SSL证书中,然后将证书发送给客户端。客户端会对SSL证书进行验证,如果有效证明是可信的服务端,否则不可信。
认证中心CA#
CA是公认的数字证书认证机构,
- 将服务器的基本信息和服务器的公钥经过hash算法获得信息摘要,然后CA机构通过他们的私钥对其进行加密后得到数字签名(还会得到对应包含公钥的CA证书)
-
服务端在接收到客户端的请求时会将数字证书回传到客户端。
-
客户端会针对得到的数字证书去寻找在计算机中与其匹配的内置的CA根证书,这个根证书也是CA机构提供的。此根证书中有对应的公钥,通过此公钥就可以将数字证书中的数字签名解密。
- 解密得到数字签名中的信息摘要,利用相同的hash算法将服务器的个人信息和公钥进行hash后与其进行对比验证是否相同。
- 全部验证通过后就进行正常的非对称加密传输对称密钥,对称加密传输通讯信息的过程。
所以认证机构就是承担了一个证书验证过程中的公钥和私钥管理的一个角色,一旦其CA的私钥泄露那么所有信息将不可信。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律