欢迎光临散文网 会员登陆 & 注册

010. 从HTTP 到 HTTPS:SSL 证书的原理和获取方法

2023-03-14 20:08 作者:姚千山  | 我要投稿

什么是 HTTPS

HTTPS(超文本传输安全协议)是 HTTP 协议的加密版本。它使用 SSL 或 TLS 协议来加密客户端和服务器之间所有的通信。安全连接允许客户端与服务器安全地交换敏感数据,例如网上银行或者在线商城等涉及金钱的操作。

为什么需要 HTTPS

在互联网高速发展的今天,基于 HTTPS 的网站早已普及。主流浏览器,如 Chrome、Edge 等更是不推荐不安全的 HTTP,访问这类网站将会被标注为不安全。而各类主流网站纷纷抛弃 HTTP ,投入 HTTPS 的怀抱。一个必须被接受的事实是,HTTP 被彻底淘汰的这一天的到来将不会太远。

从 HTTPS 的概念中,我们知道其最大的特点是:安全。当然,这种安全是以性能的降低为代价的。显然,对明文数据进行一次额外的加解密操作会使得传输数据变慢,客户端与服务端会消耗更多的资源。从这方面来看,升级为 HTTPS 是一次彻底的反向优化,尤其是在局域网等不需要加密的场景。

事实上,有些情况下,HTTPS 甚至可以比 HTTP 更快。这是因为 HTTPS 可以利用一些新的技术来优化性能,例如 HTTP2、HTTP3、TLS 1.3等。这些技术可以减少握手次数、降低延迟、提高并发度等。同时,我们也要考虑到随着技术的进步,HTTP 更新换代是一种必然,HTTP4 乃至 HTTP5 等技术并不遥远。这些新技术可能是完全基于 HTTPS 的,不会再支持明文传输的 HTTP。即便是 HTTP2 版本,不使用 SSL 证书进行加密也是不推荐的。

因此,将 HTTP 升级到 HTTPS,并不一定会影响网站的速度。相反,它可能会带来更多的好处,如安全性、信任度、新技术等。

HTTPS 原理

我们知道 HTTP 是基于 TCP/IP 的应用层协议,HTTP 报文直接通过 TCP 传输,极易受到中间人攻击。如果有人截获并篡改了数据包,客户端与服务端是完全无法察觉的,这就带来了巨大的安全隐患。

如何保证数据安全,加密这种手段是很容易被想到的。在 HTTPS 中,使用的正是非对称加密与对称加密相结合的方式。

服务端拥有非对称加密的公钥与私钥(即 SSL 证书),当客户端完成 TCP 握手后,并不像 HTTP 那样直接发送数据,而是进行 SSL/TLS(一般是 TLS)握手阶段。服务端返回公钥,客户端校验该公钥证书是否为权威机构(CA 机构)颁发,并通过相同的哈希算法判断该证书信息是否有效。

校验成功后生成第一随机数,发给服务端。服务端响应的返回第二随机数,当客户端收到后即生成第三随机数,用公钥将其加密就得到了一密钥(称为预主密钥)。由于是非对称加密,这一预主密钥只有服务端才能通过私钥解密,得到第三随机数。这样一来,有且仅有双方才能都得到这三个随机数,利用相同的算法即可得到真正的密钥(即主密钥)。主密钥就是后续数据传输阶段进行对称加解密的唯一密钥,保证传输数据的安全。

HTTPS 对应的通信时序图

通过上述过程我们知道了 HTTPS 的原理,不难发现公私钥(SSL 证书)的重要性。缺少了证书, HTTPS 就无法实现。

SSL 证书获取

1. 自签名证书

个人签发的证书,不受权威机构认可,一般用于个人学习研究。

使用 Python 的 pyOpenSSL 库:

 详细代码,仅需修改颁发对象及拓展域名及 IP 即可。

当我们使用自签名证书时,往往会提示如下错误,我们可以选择忽略该错误也并不影响使用,当看着难免不美观。可以自行在客户端将证书添加为信任证书。

证书无效

一般情况下,也可将自签名证书配合修改 Hosts 文件使用。

2. CA 机构颁发证书

现在绝大多数 CA 机构颁发证书是收费的,并且价格并不便宜。如果需要能够用于生产部署的免费 CA 证书,推荐 Let's Encrypt ,只要拥有域名及服务器所有权即可免费申请。

首先需在服务器安装好 Python,使用 Let's Encrypt 官方 Python 库 certbot 即可。

必须先关闭 Web 服务器,再运行该 Python 文件,最终证书保存路径可在日志中查看。证书有效期为三个月,可部署自动化脚本申请。

延伸阅读

  1. Welcome to the Certbot documentation:https://eff-certbot.readthedocs.io/en/stable/index.html

  2. Let's Encrypt - 免费的SSL/TLS证书:https://letsencrypt.org/zh-cn/docs/

  3. SSL 证书标准拓展:https://www.openssl.org/docs/manmaster/man5/x509v3_config.html#STANDARD-EXTENSIONS

  4.  pyOpenSSL 文档:https://www.pyopenssl.org/en/latest/index.html


010. 从HTTP 到 HTTPS:SSL 证书的原理和获取方法的评论 (共 条)

分享到微博请遵守国家法律