本文详细介绍了如何使用 Let's Encrypt 配置 HTTPS,以及如何在本地进行 web 开发时使用 Nginx Proxy Manager 实现这一过程。HTTPS 协议基于 SSL(Secure Socket Layer)协议,用于确保客户端和服务器之间的通信内容得到加密,以防止信息泄露或篡改。HTTPS 协议本质是 HTTP,但在此基础上使用了 SSL 来加密通信内容。SSL 是一个位于 TCP 和应用层之间的协议,基于非对称加密算法,用于确保通信双方的交流私密性。对称加密则使用同一把密钥进行加密和解密,但如何安全地传输密钥是一个问题。非对称加密解决了这个问题,服务端向客户端发放公钥,客户端使用公钥加密请求,只有服务端的私钥能解密。服务端使用私钥加密响应,客户端使用公钥解密。然而,这存在中间人攻击的风险,即一个坏人可能获取到客户端和服务器之间的通信内容。为了解决这一问题,引入了可信任的第三方权威机构 CA(Certificate Authority),通过一系列步骤确保客户端拿到的公钥确实是真实服务器的公钥。最终,通过混合加密方式,双方都拥有了相同的密钥,且这个密钥安全且不会被任何中间人获取。在实际应用中,使用各种抓包软件(如 Fiddler)时,会发现无法解析 HTTPS 的包,这是因为需要在系统中安装它自己签发的 CA 证书。了解 HTTPS 后,就可以理解 Fiddler 作为你客户端和服务器之间的代理,会处理所有流量,因此能够展示抓包内容。然而,有了 HTTPS 后,客户端和服务器使用对称加密密钥进行通信,Fiddler 无法解密通讯数据,因此只能充当中间人角色。但因为 Fiddler 的自签发证书不被 OS 信任,所以需要手动信任该证书。为了轻松配置 HTTPS,我们可以使用 Let's Encrypt,这是一个基于 ACME(Automated Certificate Management Environment)协议的证书颁发机构。ACME 协议旨在自动化网站或网络应用程序的证书签发和管理过程,而 Let's Encrypt 则是提供免费 SSL 证书的 ACME 实现。这种自动化操作使得部署 HTTPS 更加便捷。在实际部署过程中,我们通常将 web 应用部署为 http 协议,而将 https 功能交给网关或反向代理,如 Nginx、Traefik、Nginx Proxy Manager 等。这些工具负责流量的加密解密,并将明文数据转发给应用进行处理。Nginx Proxy Manager 是一种图形化界面的工具,支持 Let's Encrypt,可以自动获取、更新和安装 SSL 证书,简化了证书管理过程。在使用 Nginx Proxy Manager 时,首先需要通过 Docker 部署,创建一个名为 npm 的网络,确保网关和你的服务能够通过容器名互相访问。使用 Docker Compose 配置文件启动服务后,访问服务器的 81 端口即可看到 GUI 页面。登录后,修改默认账号密码。在 GUI 页面添加 Proxy Host,并配置反向代理,通过 HTTPS 访问你的服务。Nginx Proxy Manager 中的 DNS 挑战是 DNS 验证方式的一种,用于验证你对域名的所有权。通过配置 Credentials File Content,你可指定验证所需的凭据。在实现 HTTPS 时,还需注意使用基本认证功能,确保所有流量都通过 Nginx Proxy Manager 处理,以防止安全漏洞。本文通过详细步骤介绍了如何使用 Let's Encrypt 和 Nginx Proxy Manager 实现 HTTPS 配置,简化了部署过程,并提供了安全的通信保障。