- A+
所以说,对于我们这些草根博客站长们来说,部署SSL启用HTTPS也可以提到日程上来了。去年的时候HTTPS对于我们站长们来说还是有点“白富美”高攀不上的感觉。但是到今天来看,SSL证书已经没有“白富美”的神秘感了,甚至连开源免费的SSL证书也都出现了。重点是支持api签发和统配。接下来起子就结合自己部署SSL的经验给大家做个HTTPS系列的教程分享吧,以方便大家及时部署自己博客的SSL证书。
1.起头
今天我们就先从“申请获取免费SSL证书”讲起。
“免费”这个概念可以说在中国互联网里绝对是个“烂大街”的玩法了,“免费的永远也是最贵的”都成了众多老网民的普遍认识了。但是,作为博客站长一定要高清楚“营销型免费”和“技术开源型免费”的区别哦,这从根本上还是有很大的区别的,“营销型免费”最终都是为了“填坑”的,“技术开源型免费”有时候才能称得上是真正的“免费”比如,开源的Linux、开源的 WordPress 等等。这些我们都可以免费安全的使用而不需要支付任何的费用,也不用担心有“坑”需要“填”。那么,说回SSL证书,也有“开源免费”的,那就是——Let's Encrypt SSL证书。
怎么样,看了上述有关Let's Encrypt的介绍后,是否还鄙视这种“免费”SSL证书呢?
2. 操作
直接从github 下了acme脚本
1 | wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh |
添加权限
1 | chmod +x acme.sh |
安装脚本,添加环境,配置账号
1 | /root/acme.sh --install --accountemail mail123456@drscrewdriver.top --accountkey 就不告诉你 --days 60 |
安装完成后会创建 /root/.acme.sh/文件夹,文件夹中会添加acme.sh的副本
1 | /root/acme.sh --issue --dns -d *.drscrewdriver.com |
此时会出现提示大概就是在 DNS 中添加一条 _acme-challenge
的 TXT 记录,然后 Let's Encrypt 会去验证这个域名返回的 TXT 是否正确,设置完成后可以用下面的命令确认下。
1 | dig -t txt _acme-challenge.drscrewdriver.com |
完成后
1 | /root/acme.sh --issue --renew --dns -d *.drscrewdriver.com |
证书的位置在/root/.acme.sh/*.drscrewdriver.com
dnspod 还可以设置dns,pod的apikey 认证时使用 --dns dns_dp替换dns
更新
acme.sh的版本进行了版本,现在手动dns需要了解手动模式和别名
-yes-I-know-dns-manual-mode-enough-go-ahead-please参数识别后才能开始手动模式
--challenge-alias 加上后才能一次验证
3. copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
acme.sh --installcert -d mydomain.com \
--key-file /etc/nginx/ssl/mydomain.key \
--fullchain-file /etc/nginx/ssl/mydonain.cer \
--reloadcmd "service nginx force-reload"
(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
--installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.
值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.
4. 更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
5. 更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
升级 acme.sh 到最新版 :
acme.sh --upgrade
如果你不想手动升级, 可以开启自动升级:
acme.sh --upgrade --auto-upgrade
之后, acme.sh 就会自动保持更新了.
你也可以随时关闭自动更新:
acme.sh --upgrade --auto-upgrade 0
好了,到此acme.sh的使用基本就是这些了,至于是采用HTTP还是DNS方式来申请证书?就起子的经验来看,我比较喜欢DNS的验证方式,因为这种方式的依赖性最小,更加的灵活,我建议大家都用DNS来验证申请Let's Encrypt证书。
当然,acme.sh还有不少实用的参数可以方便我们来管理已经通过acme.sh申请过证书、域名等等,比如:
acme.sh --list
这个就是列出当前已经申请到证书的域名信息,如下图:
具体的参数,大家可以使用 acme.sh --help
来查看。
其实 acme.sh 的使用还是非常“傻瓜”的,只要照着指令参数做就可以轻松搞定的,上述的示例其实将域名修改为自己的域名就可以用了,其它的也是同样的道理,简单修改一下参数就可以拿来用的。目前,申请获取Let's Encrypt证书有很多种方法,军哥的LNMP一键包里也可以直接申请的,网上也有不少申请Let's Encrypt证书的教程,使用的工具可以说是五花八门。但是,就起子的经验来看 acme.sh 这个是最方便、最快捷、最省事儿的,因为使用的就是Let's Encrypt的ACME协议,所以兼容性绝对是最可靠的,Shell脚本式的对系统几乎没有任何依懒性,有很强的自由度。
