什么是 HTTPS 和 SSL?安全网站如何工作,通俗讲解
HTTPS 是 HTTP 的安全版本,而 HTTP 是浏览器与网站通信所用的协议。它使用 TLS(传输层安全协议)把每一次请求和响应都包裹在加密连接中,因此访问者与网站之间的任何人都无法读取或篡改所传输的内容。SSL 是同一理念的旧称,即 TLS 所取代的原始协议,这也是人们仍然说“SSL 证书”的原因。
用 AI 构建时为什么需要 HTTPS
任何你发布的应用都应当通过 HTTPS 提供服务。这不仅是良好的做法:
- 浏览器要求它。 使用明文 HTTP 的网站会被标记为“不安全”,而且一些浏览器功能,例如位置信息访问、摄像头和麦克风,以及用于离线应用的 Service Worker,通常只能在安全的(HTTPS)页面上工作。
- 登录与表单。 没有 HTTPS,密码、会话 Cookie 和表单数据都会以可读文本的形式传输。同一个咖啡馆 Wi-Fi 上的人都有可能截获它们。
- 支付与第三方服务。 支付服务商、OAuth 登录以及许多 API 都要求使用 HTTPS 的重定向和回调地址。
- 信任与搜索。 访问者会注意到警告,而且谷歌已表示会把 HTTPS 作为排名信号。
好消息是,在大多数现代托管平台上,HTTPS 都是自动配置的。你主要需要理解其中的各个组成部分,以便在自定义域名或混合内容警告出问题时能够修复。
一个日常类比
通过明文 HTTP 发送数据,就像寄一张明信片:经手的每位邮递员都能读到内容,甚至有人可以改写信息。
HTTPS 则像寄出一个密封且防篡改的信封,并且先核对收件人的官方身份证件。证书就是这张身份证件,由受信任的机构(即证书颁发机构)签发,该机构已核实网站确实控制着这个域名。加密则是那个密封的信封。身份证件证明你写信的地址是正确的;信封则保证内容的私密性。
HTTPS 如何工作(简要说明)
当浏览器打开 https://shop.example.com 时:
- 打招呼。 浏览器连接服务器,并告知自己支持哪些加密方法。
- 证书。 服务器发送它的证书,证书声明“此密钥属于
shop.example.com”,并由证书颁发机构签名。 - 核验。 浏览器用它已信任的颁发机构核对签名,检查证书是否已过期,并确认域名相符。
- 密钥。 浏览器与服务器为本次会话商定一把全新的密钥,且从未在明文中传送它。
- 加密通信。 所有请求和响应(页面、表单数据、Cookie)现在都以加密形式传输。
这个 TLS 握手 只需几毫秒,并且自动完成。访问者只会看到小锁图标(或在某些浏览器中是中性的网站信息图标)。
HTTPS 保护什么,不保护什么
| 能保护的 | 不能保护的 |
|---|---|
| 浏览器与服务器之间传输中的数据 | 数据一旦到达你的服务器或数据库之后 |
| 防止公共 Wi-Fi 上的窃听 | 防止恶意或诈骗网站 |
| 防止途中有人篡改页面 | 防止你的应用中的错误,例如缺失的权限检查 |
| 传输过程中的 Cookie 和密码 | 防止弱密码或泄露的 API 密钥 |
HTTPS 加密的是请求的内容,包括页面路径和查询字符串。但你访问的域名通常对沿途的网络仍然可见。这也是为什么无论如何都不要在网址中放入个人数据的原因之一:网址同样会进入日志和浏览器历史记录。
实例:连接自定义域名
假设你发布了一个预约应用,想把它放在 book.myyogastudio.com 上:
- 你添加一条 DNS 记录,将
book.myyogastudio.com指向你的主机。参见域名与 DNS 如何工作。 - 主机向证书颁发机构证明它控制着该域名,通常是通过在该域名上响应一个验证挑战,然后获得证书。
- 主机安装证书,并在证书过期前自动续期。证书的有效期刻意设计得很短,因此自动续期非常重要。
- 访问
http://book.myyogastudio.com的访问者会被重定向到https://。
如果第 1 步出错,例如记录指向了别处,或者中间有代理,第 2 步就可能失败,访问者会看到证书错误。这是人们连接自定义域名时最常遇到的 HTTPS 问题。
关键术语
| 术语 | 含义 |
|---|---|
| TLS | 传输层安全协议,即 HTTPS 背后的加密协议。 |
| SSL | 安全套接层,是 TLS 已过时的前身。这个名称仍在沿用。 |
| 证书(Certificate) | 一个经过签名的文件,将域名与公钥关联起来。 |
| 证书颁发机构(CA) | 浏览器信任、用于签发证书的机构,例如 Let's Encrypt。 |
| 域名验证(DV) | 证明你控制该域名的证书,几乎所有网站都使用这种证书。 |
| 通配符证书 | 覆盖一级子域名,例如 *.example.com。 |
| 混合内容 | 一个 HTTPS 页面通过明文 HTTP 加载了部分资源。浏览器会阻止或警告这种情况。 |
| HSTS | 一个响应头,告诉浏览器从此以后始终使用 HTTPS 访问你的网站。 |
| 443 端口 | HTTPS 的标准端口(HTTP 使用 80 端口)。 |
常见误解
- “小锁图标代表网站值得信任。” 它只表示连接是私密的,且域名相符。诈骗者同样能获得证书。
- “只有支付页面才需要 HTTPS。” 任何带有登录、表单或 Cookie 的页面都需要它,而这几乎是每个应用的情况。直接在所有页面上使用就好。
- “证书很贵。” 免费且受信任的证书是标准配置,大多数主机都会替你管理。
- “HTTPS 能让我的应用安全。” 它只保护连接本身。你的应用仍然需要服务端的权限检查、妥善的密钥管理和输入验证。参见AI 构建应用的安全清单。
- “HTTPS 会让网站变慢。” 现代 TLS 带来的开销很小,而且像 HTTP/2 这类能让网站更快的功能,通常在浏览器中要求使用 HTTPS。
解决常见的 HTTPS 问题
| 症状 | 可能的原因 |
|---|---|
| “您的连接不是私密连接” | 证书不覆盖该确切域名、已过期,或尚未签发 |
www. 可以访问,但裸域名不行(或反过来) | 只有一个名称配置了 DNS 和证书 |
| 小锁消失,部分页面显示“不安全” | 混合内容:图片、脚本或字体通过 http:// 加载 |
| 连接域名后立即出现证书错误 | DNS 仍在生效中,或前面的代理阻止了证书验证 |
向 AI 构建器提出的请求
- “确保每张图片、每个脚本和每种字体都通过 HTTPS 或相对地址加载,不要使用
http://链接。” - “把所有 HTTP 流量重定向到 HTTPS。”
- “为会话 Cookie 设置
Secure和HttpOnly标志。” - “所有 OAuth、支付和 Webhook 回调地址都使用
https://。” - “我的自定义域名显示证书错误,主机期望的是哪条 DNS 记录?”
Mythex 中的 HTTPS
在 Mythex 上连接自定义域名(Pro 功能)时,你需要添加一条 CNAME 记录,指向 Mythex 显示给你的 slug.mythex.ai 目标地址,然后点击 验证(Verify),Mythex 会自动为该域名签发 HTTPS。文档中说明了两个最常见的问题:如果你的 DNS 托管在 Cloudflare 上,请把记录设置为“仅 DNS”(灰色云朵),而不是代理模式,这样 Mythex 才能签发证书;另外,DNS 可能在 HTTPS 完全配置好之前就通过验证,因此请等待几分钟后再次验证。参见文档中的自定义域名,以及我们关于连接自定义域名的指南。
常见问题
HTTP 和 HTTPS 有什么区别?
HTTP 在浏览器和网站之间以可读的文本形式传输数据。HTTPS 则是通过加密的 TLS 连接传输的 HTTP,因此同一网络上或传输路径上的人无法读取或篡改所发送的内容,浏览器也能确认自己连接的是真正的网站。
SSL 和 TLS 是同一回事吗?
TLS 是 SSL 的现代继任者。所有版本的 SSL 都已过时且不安全,如今安全的网站都使用 TLS。人们出于习惯仍然说“SSL 证书”,但这些证书实际上是与 TLS 配合使用的。
小锁图标代表网站是安全的吗?
不代表。小锁图标表示连接已加密,并且证书与域名相符。诈骗网站同样可以拥有有效证书。它只能说明没有人能窥探这段连接,并不能说明网站所有者是值得信任的。
SSL 证书需要付费吗?
通常不需要。Let's Encrypt 等免费的自动化证书颁发机构所签发的证书,是浏览器信任的;大多数托管平台会为你获取并续期证书。付费证书主要增加的是技术支持或额外的身份验证。
为什么我的网站显示“不安全”?
常见原因包括:通过 http:// 而不是 https:// 访问网站;证书已过期,或不覆盖该确切域名;页面通过明文 http:// 加载图片或脚本(混合内容)。