跳至主要内容

使用 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 的计划”。

GitHub Pages 现在使用 GitHub Actions 来执行 Jekyll 构建。当使用分支作为构建的源时,如果要使用内置的 Jekyll 工作流,则必须在您的存储库中启用 GitHub Actions。或者,如果 GitHub Actions 不可用或已禁用,则将 .nojekyll 文件添加到源分支的根目录将绕过 Jekyll 构建过程并直接部署内容。有关启用 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 会将请求 TLS 证书的工作排队到 Let's Encrypt。收到有效证书后,GitHub 会将其自动上传到处理 Pages TLS 终止的服务器。此过程成功完成后,自定义域名旁边会显示一个复选标记。

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

解决混合内容问题

如果为您的 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)
别名ANAME@USERNAME.github.io
ORGANIZATION.github.io
子域名
(ww​w.example.com
blog.example.com)
CNAME 记录SUBDOMAIN.example.com。USERNAME.github.io
ORGANIZATION.github.io