跳至主要内容

使用 HTTPS 保护您的 GitHub Pages 网站

HTTPS 添加了一层加密,可以防止其他人窥探或篡改您网站的流量。您可以为您的 GitHub Pages 网站强制执行 HTTPS,以透明地将所有 HTTP 请求重定向到 HTTPS。

谁可以使用此功能?

GitHub Pages 可在使用 GitHub Free 和 GitHub Free for organizations 的公共仓库中使用,以及在使用 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库中使用。有关更多信息,请参阅“GitHub 的计划”。

从 2024 年 6 月 30 日起,所有 GitHub Pages 构建都将使用 GitHub Actions。无需进行其他更改,但必须在您的仓库中启用 GitHub Actions 才能继续构建。有关启用 GitHub Actions 的更多信息,请参阅“管理仓库的 GitHub Actions 设置”。

拥有仓库管理员权限的人员可以为 GitHub Pages 网站强制执行 HTTPS。

关于 HTTPS 和 GitHub Pages

所有 GitHub Pages 网站,包括使用自定义域名正确配置的网站,都支持 HTTPS 和 HTTPS 强制执行。有关自定义域名的更多信息,请参阅“关于自定义域名和 GitHub Pages”和“自定义域名和 GitHub Pages 故障排除”。

GitHub Pages 网站不应用于敏感交易,例如发送密码或信用卡号码。

警告:即使网站的仓库是私有的,GitHub Pages 网站也对互联网公开。如果您在网站的仓库中包含敏感数据,您可能需要在发布之前删除这些数据。有关更多信息,请参阅“关于仓库”。

注意:RFC3280 规定,通用名称的最大长度应为 64 个字符。因此,为了成功创建证书,您的 GitHub Pages 网站的整个域名必须小于 64 个字符。

为您的 GitHub Pages 网站强制执行 HTTPS

  1. 在 GitHub 上,导航到您的网站仓库。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择下拉菜单,然后单击设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,单击 Pages

  4. 在“GitHub Pages”下,选择**强制使用 HTTPS**。

证书配置故障排除(“证书尚未创建”错误)

在 Pages 设置中设置或更改自定义域名时,将开始自动 DNS 检查。此检查确定您的 DNS 设置是否已配置为允许 GitHub 自动获取证书。如果检查成功,GitHub 将排队一项作业,以从 Let's Encrypt 请求 TLS 证书。收到有效证书后,GitHub 会自动将其上传到处理 Pages TLS 终止的服务器。此过程成功完成后,您的自定义域名旁边将显示一个复选标记。

请注意,您的 GitHub Pages 网站必须公开可用才能颁发 Let's Encrypt 证书。证书颁发后,您可以将网站恢复为私有。

此过程可能需要一些时间。如果您在点击**保存**后几分钟内未完成此过程,请尝试点击自定义域名旁边的**删除**。重新输入域名并再次点击**保存**。这将取消并重新启动配置过程。

解决混合内容问题

如果您为 GitHub Pages 网站启用 HTTPS,但网站的 HTML 仍然通过 HTTP 引用图像、CSS 或 JavaScript,则您的网站正在提供混合内容。提供混合内容可能会降低网站安全性并导致加载资产出现问题。

要删除网站的混合内容,请确保所有资产都通过 HTTPS 提供,方法是在网站的 HTML 中将http://更改为https://

资产通常位于以下位置

  • 如果您的网站使用 Jekyll,您的 HTML 文件可能位于 _layouts 文件夹中。
  • CSS 通常位于 HTML 文件的<head>部分。
  • JavaScript 通常位于<head>部分或关闭</body>标签之前。
  • 图像通常位于<body>部分。

提示:如果您在网站的源文件中找不到资产,请尝试在文本编辑器或 GitHub 中搜索网站的源文件中的http

HTML 文件中引用的资产示例

资产类型HTTPHTTPS
CSS<link rel="stylesheet" href="http://example.com/css/main.css"><link rel="stylesheet" href="https://example.com/css/main.css">
JavaScript<script type="text/javascript" src="http://example.com/js/main.js"></script><script type="text/javascript" src="https://example.com/js/main.js"></script>
图片<a href="http://www.somesite.com"><img src="http://www.example.com/logo.jpg" alt="Logo"></a><a href="https://www.somesite.com"><img src="https://www.example.com/logo.jpg" alt="Logo"></a>

验证 DNS 配置

在某些情况下,由于自定义域的 DNS 配置问题,无法生成 HTTPS 证书。这可能是由于存在额外的 DNS 记录,或者记录未指向 GitHub Pages 的 IP 地址。

为了确保 HTTPS 证书能够正确生成,我们建议使用以下配置。任何带有 @ 主机的额外 AAAAAALIASANAME 记录,或者指向 www 子域或其他自定义子域(您想使用 GitHub Pages 的)的 CNAME 记录,都可能阻止 HTTPS 证书生成。

场景DNS 记录类型DNS 记录名称DNS 记录值
顶层域名
(example.com)
A@185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
顶层域名
(example.com)
AAAA@2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153
顶层域名
(example.com)
ALIASANAME@USERNAME.github.io
ORGANIZATION.github.io
子域
(ww​w.example.com,
blog.example.com)
CNAMESUBDOMAIN.example.com.USERNAME.github.io
ORGANIZATION.github.io