现在HTTPS是大势所趋,某些浏览器已经开始强制HTTPS了,HTTP要么打不开,要么提示你不安全,既然如此,我们也要跟上时代的步伐不是吗?
咱就不探讨HTTPS使用的CA证书具体是什么了,只要知道这个东西很贵!(对于普通人或者小公司来说)我们只能另辟蹊径,好在,有那么一家机构叫做Let's Encrypt,这是一家非盈利性质证书颁发机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的传输层安全性协议。听起来就特别牛,有木有?
本文使用Github上一个开源的工具,叫做acme.sh,它实现了acme协议,可以从Let's Encrypt生成免费的证书。
项目在这里:https://github.com/acmesh-official/acme.sh
项目有完整的WiKi,且有中文版,所以我只做一个介绍,和记录一下我常用的命令。
安装acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
默认安装的目录在当前用户主目录下,对于root用户当然就是在/root
目录下了。
x> 我在用这条官方给的命令安装总是失败,所以只能手动安装
自动安装失败情况下如何手动安装:
首先克隆一下仓库到本地,然后进入项目根目录,最后使用--install
参数进行安装。
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install
手动配置DNS解析生成泛域名证书
这种方式的好处是,你不需要任何服务器,不需要任何公网IP,只需要DNS的解析记录即可完成验证。坏处是,如果不同时配置Automatic DNS API,使用这种方式acme.sh将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
acme.sh --issue --dns -d *.example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
执行完上面这条命令之后,会给你一条解析记录,登录你的域名注册商,添加对应的解析,然后运行下一条命令。
acme.sh --renew -d *.example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
官方介绍可以使用域名商的DNS管理API来实现自动更新,但是我生成的证书并不在本地使用,还是要拷贝一次的,添加一条解析也不用多长时间,所以没有必要自动更新。
最后生成的证书在用户目录下的.acme.sh
下,以域名命名的目录里,建议用tar打包一下,然后下载下来,就可以使用了。
使用DNS供应商自动验证域名
以阿里云为例。
export Ali_Key="<key>"
export Ali_Secret="<secret>"
acme.sh --issue --dns dns_ali -d simaek.com -d \*.simaek.com --keylength ec-256