Https为什么比Http安全?

1,320 阅读2分钟

Https是在Http之上做了一层加密和认证; 主要的区别是Https在TLS层对常规的Http请求和响应进行加密,同时对这些请求和响应进行数字签名。

Http请求的样式: 明文传输,通过抓包工具可以抓到

GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

Https的请求样式:

t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

通过抓包工具抓到了也不知道什么含义。

Http的风险?

  • 数据明文传输,可被嗅探
  • 可被中间人工具,网络劫持

image.png

Https的工作原理?

Https使用了对称加密,非对称加密,以及认证。 HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段,关于证书的认证,首次下载服务器证书的时候会像第三方机构进行认证,后续使用本地已经认证好的证书。

1、客户端发起Https请求,服务器返回自身的https证书和公钥;

2、客户端验证证书是否有效,证书一般有颁发机构,如果能认证颁发机构认证的证书有效即认为有效证书。

3、客户端随机生成公钥私钥对,然后再生成一个随机数;

4、客户端通过服务器的公钥再进行加密;

5、服务端收到了客户端用自己的公钥加密的内容,使用私钥解密;拿到随机数。

6、后续的数据传输都使用随机数进行加解密;

后续服务端使用客户端的公钥加密,客户端使用自己的私钥解密; 客户端使用服务器的公钥加密,服务器使用自己的私钥解密; 同时传输的内容也通过了随机数进行加密;

Q&A

Q: HTTPS 为什么安全?
A: 因为 HTTPS 保证了传输安全,防止传输过程被监听、防止数据被窃取,可以确认网站的真实性。

Q: HTTPS 的传输过程是怎样的?
A: 客户端发起 HTTPS 请求,服务端返回证书,客户端对证书进行验证,验证通过后本地生成用于改造对称加密算法的随机数,通过证书中的公钥对随机数进行加密传输到服务端,服务端接收后通过私钥解密得到随机数,之后的数据交互通过对称加密算法进行加解密。

Q: 为什么需要证书?
A: 防止”中间人“攻击,同时可以为网站提供身份证明。

Q: 使用 HTTPS 会被抓包吗?
A: 会被抓包,HTTPS 只防止用户在不知情的情况下通信被监听,如果用户主动授信,是可以构建“中间人”网络,代理软件可以对传输内容进行解密。

参考:www.52im.net/thread-3897…