Github Pages 开始为自定义域名提供 HTTPS 支持(附启用方法)

Disqus 评论区因为一些小故障暂时要关闭一阵子,请大家见谅。(虽然还没有人留言就是了…)

近日访问博客的朋友可以发现,本博客已经开始支持 HTTPS 了: https://poplite.xyz


2019年6月4日更新:后记


本博客搭建在 Github Pages 平台上。Github Pages 对于博主这样偶尔写写博客的人来说已经足够了,但 Github Pages 有一个缺点:自定义域名无法使用 https 链接访问

虽然 Github 早在2016年为 GitHub Pages 添加了 HTTPS 支持,但自定义域名开启 HTTPS 却是一件令人头疼的事情。 直接用 https 链接访问自定义域名会出现证书错误(这是因为 Github 提供的 SSL 证书指向的域名是*.github.com*.github.io,而不是我们绑定的域名),只能使用 Cloudflare 之类的支持 Universal SSL 的 CDN 曲线支持 HTTPS 。

好消息是:就在前天(5月1日),GitHub 宣布与 Let’s Encrypt 合作,为 Github Pages 自定义域名提供官方的HTTPS 支持。如果在 Github Pages 绑定了域名,现在可以使用 Let’s Encrypt 签发的 SSL 证书为绑定的域名开启 HTTPS 访问。


下面介绍如何为已绑定的自定义域名启用 HTTPS 访问:

已经用上 Cloudflare,开始之前请关掉 Cloudflare 的 CDN 功能。

首先要修改 DNS 记录: (如果是使用CNAMEALIAS记录,将自定义域名映射到 Github Pages 域名的,请跳过此步)

  1. 打开 DNS 服务商的 DNS 记录修改页面。(博主用的是 Namesilo 自带的 DNS)

  2. 原来域名 A 记录指向的IP地址是 192.30.252.153192.30.252.154 ,改成下面几个新地址: 185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153。(这些IP地址可以在这个页面上找到)

  3. 保存修改后,等待 DNS 记录生效。

然后,打开 GitHub Pages 设置页面:

  1. 找到处于不可选状态的Enforce HTTPS选项,旁边会提示Unavailable for your site because your domain is not properly configured to support HTTPS
  2. 将填在Custom domain里的自定义域名清空,保存,然后重新填上自定义域名,再保存。
  3. 现在可以勾选Enforce HTTPS选项了,这时会提示正在签发证书: Not yet available for your site because the certificate has not finished being issued
  4. 证书签发成功后,可以使用 https 链接访问自定义域名了。

也可以修改 DNS 记录后不等待记录生效,直接修改 GitHub Pages 设置,这时页面会提示Domain does not resolve to the GitHub Pages server,但不影响正常使用。

这是 Let’s Encrypt 为博客签发的 SSL 证书,有效期为3个月,估计到期后会自动续期:


后记:

2019年3月,博主已经将本博客迁移至Lightsail。博客现在使用的 Let’s Encrypt 证书是博主用acme.sh签发的。

博主并没有从 Github Pages 上移除博客,仍然可以找到 Github 签发的 Let’s Encrypt 证书(已经过期):

$ curl -vks https://poplite.xyz/ --resolve "poplite.xyz:443:185.199.108.153" > /dev/null
* Added poplite.xyz:443:185.199.108.153 to DNS cache
* Hostname poplite.xyz was found in DNS cache
*   Trying 185.199.108.153...
* Connected to poplite.xyz (185.199.108.153) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 600 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* 	 server certificate verification SKIPPED
* 	 server certificate status verification SKIPPED
* 	 common name: poplite.xyz (matched)
* 	 server certificate expiration date FAILED
* 	 server certificate activation date OK
* 	 certificate public key: RSA
* 	 certificate version: #3
* 	 subject: CN=poplite.xyz
* 	 start date: Wed, 27 Feb 2019 02:41:07 GMT
* 	 expire date: Tue, 28 May 2019 02:41:07 GMT
* 	 issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
* 	 compression: NULL
* ALPN, server accepted to use http/1.1
> GET / HTTP/1.1
> Host: poplite.xyz
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: GitHub.com
< Content-Type: text/html; charset=utf-8
......

参考链接:

2022/1/28:由于 Disqus 存在不明的 BUG,新发布的评论需要等待数分钟至数小时才能显示出来

不等待、强制显示新评论的方法:评论发布成功后,点击“编辑”,直接按右下角的确认按钮即可(不用改动评论内容)