如何能「白嫖」SSL证书?
看到「白嫖」二字,我啪的一下就点进来了
起因是今天下午看到了 krau 发的一篇博客
于是乎,我也要发,而且要比他写得更全面,《内卷的名义》
众所周知,HTTPS 流量现在已经是主流了,我们应「紧跟时代潮流」
数据来源:Google透明度报告
基于此,在搭建网站的时候,我们应优先考虑搭建 HTTPS 网站
但 HTTPS 所需要的 SSL 证书,在以前并不是免费的。但好在,有 Let’s Encrypt、TrustAsia 这样的公司或组织愿意免费给我们签发 SSL 证书。
目前申请这类免费证书的方式有两种,一种是通过网页申请,例如 FreeSSL.cn 之类的;另一种是通过脚本申请,例如 ACME.sh 之类的。
通过网页申请
通过云服务商来申请
通过网页申请的话,如果你是在国内的云服务商买的域名,一般在 SSL 证书管理上都会有一个「免费证书」的功能,通过这个功能可以免去很多繁杂的工作,一键获得 SSL 证书。
腾讯云:我的证书 - SSL 证书 - 控制台 (tencent.com)
签发机构为 TrustAsia 亚洲诚信,有效期一年,限制 20 个证书。
阿里云:数字证书管理服务管理控制台 - SSL 证书 (aliyun.com)
需要手动购买「DV单域名证书【免费试用】」包后才可创建申请,签发机构为 DigiCert,有效期一年,限制 20 个证书。
青云:SSL 证书服务 亚太2区-A AP2A 青云QingCloud 控制台
签发机构为 TrustAsia 亚洲诚信 或者 Let’s Encrypt,TA 有效期一年,LE 有效期三个月,LE 可申请泛域名证书,尚不了解限制情况(因为没申请过)。
UCloud 优刻得:UCloud - 中立 安全 可信赖
签发机构为 TrustAsia 亚洲诚信,有效期一年,同样不清楚限制情况。
七牛云:七牛云 - 证书管理 (qiniu.com)
签发机构同样为 TrustAsia 亚洲诚信,有效期一年。至于是不是免费,不好说,因为标注的是 限免。
百度云:SSL证书_服务器证书_https证书 证书部署 BaiduTrust DigiCert GEOTrust-百度智能云
签发机构同样为 TrustAsia 亚洲诚信,有效期一年,限制 20 个证书。
通过一些网站来申请
FreeSSL:FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站
FreeSSL 可以说是我建站梦开始的地方,我在最初建站的时候就是用的 FreeSSL 申请的证书。
签发机构为 TrustAsia 亚洲诚信 或 Let’s Encrypt,TA 有效期为一年或 ∞,LE 有效期三个月。
免费SSL:免费SSL证书 - 免费申请SSL证书,HTTPS证书永久免费申请 (mianfeissl.com)
签发机构为 Comodo、RapidSSL、Let’s Encrypt,有效期就如图所示了。需要注册账号并验证手机号,并且在申请证书时的验证方式也很有限,见仁见智了。
SSL for Free:SSL For Free - Free SSL Certificates in Minutes
签发机构为 ZeroSSL,有效期三个月,(似乎)限制三个证书。
SSL.com:SSL.com offers Free SSL Certificate to encrypt your site immediately | SSL.com
通过脚本申请
ACME.sh
说到脚本申请证书,就不得不提 ACME.sh 这位重量级人物 这个赫赫有名的脚本。通过 ACME 协议,你能够很方便的从各大签发机构获得 SSL 证书。
关于 ACME 协议,可以参考以下文章:
该脚本的项目地址:https://github.com/acmesh-official/acme.sh
(虽然国内有许多镜像,但是依旧推荐从 GitHub 获得,因为不知道国内的镜像安全性如何)
安装&配置
ACME.sh 无法直接在 Windows 下运行,需要通过 Cygwin 来运行。如果不熟悉 Cygwin 的用法,建议优先考虑用 Linux 安装。
完整的安装方式可以参考 ACME.sh 的项目 Wiki:How to install · acmesh-official/acme.sh Wiki (github.com)
以 cURL 方式安装
1 | curl https://get.acme.sh | sh -s email=my@example.com |
以 Wget 方式安装
1 | wget -O - https://get.acme.sh | sh -s email=my@example.com |
如果执行以上命令时提示 cURL 不存在或者 Wget 不存在,请先安装 cURL/Wget
RHEL 系的 Linux(包管理器为 yum)
1 | yum install -y curl wget |
Debian 系的 Linux(包管理器为 apt)
1 | apt install -y curl wget |
安装后,如果想要通过 HTTP 方式来验证域名归属的,可以跳过下面的步骤;如果想要通过 DNSAPI 来验证域名归属的,可以参考以下步骤
这里以 Cloudflare 为例,其他的服务商可以参考 dnsapi · acmesh-official/acme.sh Wiki (github.com) 来配置
打开 Cloudflare 的 Dashboard,并登录。
然后打开 API 配置面板,可以直接点击这个链接打开: https://dash.cloudflare.com/profile/api-tokens
创建一个 API Token,使用 Edit zone DNS
模板
建议把 Token Name 改一下,例如 ACME
之类的,以免 Token 多的时候维护麻烦。
Zone Resources 选择 Include
,如果域名比较多,可以选择 All zones
;如果同时管理多个账户,而只想给其中一个账户下的域名申请证书,可以选择 All zones from an account
,并在后面选择上那个「独特的」的账号;如果只想给一个域名申请证书,可以选择 Specific zone
,并在后面选择上那个「万一挑一」的域名
其他的选项建议自己探索发现了~
设置完,点一下下面的 Continue to summary
,确认无误点 Create Token
将生成的 Token 复制下来
输入以下命令
1 | export CF_Token="上一步得到的 Token" |
然后就可以进行下一步,申请证书了。
申请证书
ACME.sh 支持自动验证或手动验证,自动验证就是通过 DNSAPI 或开启本地 HTTP 服务器来自动验证(需要提前将域名解析为 ACME 所安装服务器的 IP);手动验证就是先给签发机构提交订单,然后手动去添加 DNS 解析或在 HTTP 服务器上添加验证文件。
这里以 DNSAPI 这种自动验证方式为例,其他的方式请参考 说明 · acmesh-official/acme.sh Wiki (github.com)
直接敲命令,以 Cloudflare 为例,请把 test.leao9203.xyz
替换为需要申请证书的域名
1 | acme.sh --issue --dns dns_cf -d test.leao9203.xyz |
脚本会自动向 CA (签发机构)提交订单,添加 DNS 的解析记录,验证 DNS 解析记录,并下载证书,下载之后,脚本会显示证书位置,此时就可以使用证书了。
后记
这篇文章可以说是开了一个大坑,写完上面内容的时候大概就已经 1800+ 字了
插图也是从 22 号一直到 24 号才整完
以后再也不给自己开坑了