1.为什么要用HTTPS证书
在开始申请免费证书之前,我想要聊一聊为什么网站要使用SSL证书,如今的网站普遍启用了https证书通信,而在5年前还只有部分大公司的网站会这么做
是什么推动了https证书的普及?我总结了下面三点
- 网络安全意识的提升
- 网络带宽的提高
- 证书申请的难度降低
首先,人们的网络安全意识有了明显的提升,尤其是主流浏览器对使用了https的网站给予了更友好的提示,相反对于依然采用http的网站直接提示不安全,甚至需要用户手动确认风险后才允许访问。
其次,以前各大站点一直认为https由于多出来的验证机制会降低站点的访问速度,影响用户体验,但随着网络硬件的提升,那一丢丢性能损失逐渐变得无关紧要。
最后,随着各大主机商,云服务商,还有第三方免费ca证书的提供,申请一套证书变得越来越容易,也促进了HTTPS的普及
2.如何申请免费的HTTPS正式
本来还想聊一聊什么是HTTPS,为啥HTTPS能保证安全,为啥有的收费有的不收费,但发现想把这个讲清楚篇幅可能有点长,以后再起一篇文章吧
下面直奔主题,申请免费HTTPS正式
免费的证书当然当然要用letsencrypt的啦,毕竟是全球知名的非盈利性证书颁发机构
根据官网介绍你只要通过ACME 协议就可以免费申请到证书,而且官方推荐使用Certbot来申请,但我试试了这东西,安装环境挺麻烦的,一步步弄下来不太容易得样子,于是我找到了LEGO -- 一款go语言实现的ACME客户端,得益于go简易的运行环境要求,这个款客户端立刻吸引了我,阅读文档后发现这玩意还支持两家国内主流云服务商的DNS验证,简直不要太方便了
-
下载可用lego客户端:
我本来是在https://github.com/go-acme/lego上直接下载了最新的release的,但发现最新的release居然针对腾讯云dns验证有bug,无奈,只能手动从源码编译了(当然你也可以使用docker或者从包管理工具里安装)## 注意你需要go的编译环境, 生成的lego在/lego/dist下 git clone git@github.com:go-acme/lego.git make # tests + doc + build make build # only build
如果你对go语言有一定了解的话当然可以直接 go build ...
-
使用阿里云验证:
# 注意先在控制台解析DNS # Setup using instance RAM role ALICLOUD_RAM_ROLE=lego \ lego --email myemail@example.com --dns alidns --domains my.example.org run # Or, using credentials ALICLOUD_ACCESS_KEY=abcdefghijklmnopqrstuvwx \ ALICLOUD_SECRET_KEY=your-secret-key \ ALICLOUD_SECURITY_TOKEN=your-sts-token \ lego --email myemail@example.com --dns alidns --domains my.example.org run
-
使用腾讯云
# 注意先在控制台解析DNS TENCENTCLOUD_SECRET_ID=abcdefghijklmnopqrstuvwx \ TENCENTCLOUD_SECRET_KEY=your-secret-key \ lego --email myemail@example.com --dns tencentcloud --domains my.example.org run
-
默认配置下获得的证书会出现在当前目录的.lego/certificates下
my.example.org.crt和my.example.org.key就是要用到的证书
可以通过参数调整获得perm的证书-rw------- 1 root root 5337 May 21 19:06 my.example.org.crt -rw------- 1 root root 3751 May 21 19:06 my.example.org.issuer.crt -rw------- 1 root root 236 May 21 19:06 my.example.org.json -rw------- 1 root root 227 May 21 19:06 my.example.org.key
-
如果出现timeout的情况,那么很有可能是本地的网络不太行,更换DNS或者使用云服务器生成证书将会是一个有效的办法
-
证书的有效期是90天,临期时你可以更新你的证书
# 常规http验证, 45天时更新 lego --email="foo@bar.com" --domains="example.com" --http renew --days 45 # DNS验证, 注意环境变量这里省略了 lego --email myemail@example.com --dns alidns --domains my.example.org renew --days 45 # 还可以在更新后执行hook, 比如重加载nginx配置 lego --email="foo@bar.com" --domains="example.com" --http renew --renew-hook="nginx -s reload"
最后一点小提醒:
申请证书是有限制的,重复的证书一周最多五次,当然你可以使用测试环境https://acme-staging-v02.api.letsencrypt.org/directory
具体其他限制可以参考:https://letsencrypt.org/zh-cn/docs/staging-environment/
完结