拥有仓库管理员权限的人员可以为 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
-
在 GitHub 上,导航到您的网站仓库。
-
在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择下拉菜单,然后单击设置。
-
在侧边栏的“代码和自动化”部分,单击 Pages。
-
在“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 文件中引用的资产示例
资产类型 | HTTP | HTTPS |
---|---|---|
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 证书能够正确生成,我们建议使用以下配置。任何带有 @
主机的额外 A
、AAAA
、ALIAS
、ANAME
记录,或者指向 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 ) | ALIAS 或 ANAME | @ | USERNAME.github.io 或ORGANIZATION.github.io |
子域 ( www.example.com ,blog.example.com ) | CNAME | SUBDOMAIN.example.com. | USERNAME.github.io 或ORGANIZATION.github.io |