前言:
我们都知道 HTTPS 相对于 HTTP 更加安全,但具体安全在哪里,相信有部分朋友还是不能够讲清楚,本文将全面介绍 HTTPS 的工作原理、加密算法、证书机制等方面深入探讨 HTTPS 对数据隐私和安全性的保护。
计算机网络往期文章
什么是 UDP 协议?UDP 协议和 TCP 协议的区别是什么?
IPv4 地址、IPv6 地址、Mac 地址、端口号各自是什么?
HTTP 有哪些问题?
我们说 HTTPS 和 HTTP 都是超文本传输协议,说 HTTPS 更安全,那我们先分析一下 HTTP 有哪些问题。
- 数据明文传输:都知道 HTTP 使用的是明文传输的,数据没有进行加密,这使得传输的内容非常容易被攻击者获取。
- 数据被篡改:在 HTTP 通讯过程中,攻击者可以篡改传输的内容,因为 HTTP 没有相关的安全错误,使得数据传输不是那么的可靠,。
- 身份认证:HTTP 没有验证机制来验证通讯方的身份,攻击者可以进行身份伪装,从事欺诈行为。
HTTS 是如何解决 HTTP 存在的问题的?
- 数据加密:HTTPS 利用混合加密的方式对传输的信息进行加密,通过使用公钥加密和私钥解密的方式,确保通信内容只能被预期的接收方解密,从而解决了窃听的风险。
- 数据完整性校验:HTTPS 使用摘要算法对数据的完整性进行验证。
- 身份验证:HTTPS 使用数字证书来进行身份验证。
对称加密算法和非对称加密算法
- 对称加密算法:加密和解密使用的是同一个秘钥,因此加密和解密方在进行数据传输之前需要先共享一个秘钥,例如:小张给小美发送一条消息,他们约定了使用对称加密的算法,小张使用秘钥对消息进行加密后发送给小美,小美收到消息后,使用他们之前共享的秘钥进行解密,这就是对称加密。
- 非对称加密:非对称加密需要使用一对秘钥,分别是公钥和私钥,公钥加密私钥解密,公钥可以发送给任何人,而私钥只能在自己手里,例如:小张再给小美发送一条消息,这次他们约定了使用非对称加密的算法,因此需要先生成公钥和私钥,小张握有公钥,小美握有私钥,小张使用公钥对消息进行加密后发送给小美,小美收到消息后,使用自己的私钥对消息进行解密,这就是非对称加密。
可见对称不对称的关键在于加解密的秘钥是否一致,一致就是对称加密,不一致就是对称加密,对称加密因为加解密使用的是同一个秘钥,因此效率高,但同时也因为是同一个秘钥,秘钥在传输的过程中容易被泄露,非对称加密公钥可以自由的分发,不担心泄露问题,但是因为非对称加密的算法速度较慢,因此不太适合对大量数据进行加解密操作。
HTTPS 数据加密
上面我们分析到 HTTPS 为了解决 HTTP 数据传输的安全性,HTTPS 使用数据加密,HTTPS 使用的数据加密算法是混合加密,即使用了对称加密算法也使用了非对称加密算法,考虑到安全性问题,HTTPS 在建立通信的阶段使用非对称加密方式来进行秘钥交换,考虑到非对称加密的效率不高,在数据传输阶段使用对称加密,这样即兼顾了安全亦考虑效率问题。
HTTPS 数据数据完整性校验
HTTPS 使用哈希函数(摘要算法)来校验数据完整性,将传输的内容进行哈希算法后得到一个哈希值,如果内容稍微变化就会导致哈希值会发生变化,因此接收方可以通过接收到的内容的哈希值和发送方发送的哈希值进行对比,即可知道传输的内容是否被篡改了,从而保证了数据完整性。
HTTPS 的身份验证
HTTPS 为了解决身份认证问题使用了数字证书的方式,在聊数字证书之前我们先聊一下数字签名。
什么是数字签名?
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。-- 摘自百度百科
简单来说数字签名是对发送者真实性的有效证明,数字签名是非堆成加密算法的一种应用。
数字签名的工作流程如下:
- 发送方对消息进行哈希得到消息的哈希值,并用私钥对哈希值进行加密,得到数字签名。
- 发送方将消息和数字签名一起发送给消息接收方。
- 接收方将接受到的数字签名使用公钥解密,得到发送方发送的消息的哈希值。
- 接收方将接收到的消息进行哈希计算得到哈希值。
- 接收方将使用公钥解密得到的哈希值和接受到的消息的哈希值进行比较,如果相同,则可以确认消息的完整性和发送方的身份认证。
思考:为什么使用私钥加密公钥解密?
我们知道非对称加密算法有一对公钥和私钥,公钥对外公开,私钥保密,也就是公钥是谁都可以持有,那假设我们使用公钥加密,私钥解密会怎样呢?
使用公钥加密,私钥加密,数据可以正常加解密传输,但是因为公钥是公开的,可以多人持有,那你就没法判断公钥持有者的身份了,使用私钥就不一样了,私钥是保密的,也就是只有某一个持有者才能持有,使用私钥加密,公钥解密,那公钥如果可以正常解密,他就可以知道加密者的身份了,因为使用的是私钥加密,私钥的持有者只会是某一个唯一的持有者。
公钥加密私钥解密和私钥加密公钥解密的区别
- 公钥加密私钥解密:只有持有私钥者才可以解密数据,可以保证数据的安全性,主要用于数据安全传输。
- 私钥加密公钥解密:持有公钥者都可以解密,但是解密后可以确认唯一的私钥持有者,主要应用于数字签名、身份认证等场景。
HTTPS 的身份认证就使用了非对称加密中的私钥加密公钥解密。
CA 数字证书
上面我们谈到 HTTPS 的身份认证是通过私钥加密公钥解密完成的身份认证的,如果攻击者同时伪造了公钥和私钥呢,那这个数字签名就不太靠谱了,既然公钥和私钥可能被伪造,那我们找一个权威机构去注册一个含有公钥的数字签名,这样每次解密数据之前先去这个权威机构去校验这个数字签名是否有登记注册过,校验通过就证明这个数字签名是合法的,这个权威机构就是我们常说的CA 数字认证机构,我们将公钥放在数字证书中,只要通过 CA 机构判定数字证书合法的,公钥就就是合法的。
CA 数字证书的申请方式
CA 证书的申请方式很多,有付费的有免费的,具体如下:
- Let’s Encrypt:Let’s Encrypt 是一个开源的证书颁发机构,由 Internet Security Research Group (ISRG) 运营,它提供免费的 SSL/TLS 证书,并通过自动化工具 Certbot 简化了证书的获取和更新过程(自动续期)。
- Cloudflare:Cloudflare 提供免费的 SSL/TLS 证书以及其他 CDN 和安全服务,使用 Cloudflare 的服务,可以轻松启用 HTTPS,无需在服务器上配置证书。
- ZeroSSL:ZeroSSL 提供免费和付费的 SSL 证书服务。
- SSL For Free:SSL For Free 是一个基于 Let’s Encrypt 提供免费 SSL 证书的网站。
- Freenom:Freenom 提供免费域名注册服务,并且支持获取免费的 SSL 证书,通过 Freenom 注册域名后,可以使用 Let’s Encrypt 等服务生成 SSL 证书。
- Buypass:Buypass 提供免费 SSL 证书的,它提供的免费证书有效期为 180 天,并支持自动续期。
- Get HTTPS for Free:是一个简单的工具,用于生成 Let’s Encrypt 证书,它提供了一个用户友好的界面,指导用户逐步生成 CA 证书。
- Google Cloud Platform:提供免费的 SSL 证书,通过 Google Cloud Load Balancing 服务可以免费使用托管的 SSL 证书。
- DigiCert:DigiCert 是全球领先的付费 CA 证书颁发机构,提供多种 SSL/TLS 证书和其他安全解决方案。
- Sectigo:是全球最大且最受信任的付费 CA 证书颁发机构之一,前身为 Comodo CA,提供广泛的证书选择。
- GlobalSign:是一家全球性的付费 CA 证书颁发机构,提供广泛的 SSL/TLS 证书和其他身份验证服务。
- Entrust:提供高质量的付费 SSL/TLS 证书以及其他网络安全解决方案。
- Symantec:是一家著名的网络安全公司,其证书业务已被 DigiCert 收购,但仍以 NortonLifeLock 品牌继续提供付费的 SSL 证书。
- GeoTrust:是 DigiCert 旗下的品牌之一,提供中端市场的 SSL/TLS 证书,兼具高性价比和高信任度。
- Thawte:是全球知名的 CA 证书颁发机构之一,其证书也是付费的。
- 腾讯云:腾讯云提供免费的 SSL 证书申请服务,用户需要在腾讯云官方网站上填写域名信息并验证域名所有权,然后下载并部署证书。
- 阿里云:阿里云也提供免费的SSL证书服务,流程与腾讯云类似。
SSL 协议和 TSL 协议
SSL 协议和 TSL 协议都是 HTTPS 的加密协议,不过目前 TSL 已经发展成了 HTTPS 的主流加密协议。
SSL 全称 Secure Socket Layer,翻译过来是安全套接层,是由网景公司提出的协议,SSL 采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听,可在服务器和客户机两端同时实现支持,目前已成为网际网路上保密通讯的工业标准,现行 Web 浏览器亦普遍将Http和SSL相结合,从而实现安全通信。SSL协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS 协议全称是 Transport Layer Security,翻译过来是传输层安全协议,是 IETF 制定的一种新的协议,它建立在 SSL 3.0 协议规范之上,是 SSL 3.0 的后续版本,可以理解为 SSL 3.1,TLS 的主要目标是使 SSL 更安全。
nginx 配置 HTTPS 证书
有了 CA 证书我们还需要再负载均衡组件上对证书进行配置,这里分享一下 nginx 上证书的配置方式,如下:
http {
upstream backend {
server xxx.xxx.com;
}
server {
listen 80;
server_name xxx.xxx.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
#HTTPS 443 端口
listen 443 ssl;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
server_name xxx.com www.xxx.com;
ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.cre;
ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.key;
location / {
proxy_pass http://10.100.10.100:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
HTTP 和 HTTPS 的区别
现在都在推荐使用 HTTPS,那么 HTTP 和 HTTPS 的区别是什么呢?这里简单总结如下:
HTTP | HTTPS | |
---|---|---|
安全性 | HTTP 明文传输,信息容易被攻击者获取,不够安全 | HTTPS 使用 SSL 或者是 TSL 协议加密进行数据传输,数据安全性较高 |
端口 | 默认 80端口 | 默认 443端口 |
数字证书 | 不需要数字证书 | 使用 CA 数字证书 |
URL | 以 http 开头 | 以 https 开头 |
性能 | HTTP 不需要进行数据加密传输,不涉及数据的加解密,因此性能较高 | HTTPS 需要对数据加密传输,涉及到数据的加解密,因此性能较差 |
总结:本篇简单分享了 HTTPS 为什么比 HTTP 更安全的相关知识,希望可以帮助到对 HTTPS 不是特别数字的朋友们。
如有不正确的地方欢迎各位指出纠正。