拥有存储库管理员权限的人员可以为 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 会将请求 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 文件中引用的资产示例
资产类型 | 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 ) | 别名 或 ANAME | @ | USERNAME.github.io 或ORGANIZATION.github.io |
子域名 ( www.example.com ,blog.example.com ) | CNAME 记录 | SUBDOMAIN.example.com。 | USERNAME.github.io 或ORGANIZATION.github.io |