Road to growth of rookie

Meaningful life is called life

0%

使用阿里云 API 申请 Let’s Encrypt 泛域名免费 SSL 证书

The Internet has made the world today, and today’s world has made the Internet

最近帮朋友写了个小程序, 写完啦, 要测试啦. 没有 https 证书!! 我个人比较喜欢把测试代码放到自己的服务器上, 这样方便我自己修改 (PS: 自己的服务器嘛, 想怎么来怎么来). 所以得想办法整个 https 证书. 本来想看看网上有没有免费的, 一个不小心就 Google 到阿里云就有免费的证书. 刚好服务器是阿里的, 域名也是阿里的. 所以决定整一个用用

网站部署 HTTPS 的重要性

互联网造就了很多产业, 也造就了很多黑产业. 让我们想象一下: 当我们访问淘宝、京东的时候. 右下角漂浮着 “大家好我是渣渣辉, 是兄滴就来啃我”. 这种感觉肯定特别的酸爽 (PS: 哈哈哈哈哈, 要真是这样张家辉肯定还会火点). 或者我们再来想象一下: 当我们输入银行的网址后打算转账的时候, 卡号输了、密码输了、钱没到账不说, 银行卡里一分不剩, 这是不是就很悲哀了呢

上举的两个例子其实是真实存在的. 在输入网址访问网页, 到网页返回数据给我们的过程中, 其实是分很多步骤的比如最基础的 DNS 解析 (PS: 不做详解). 如果在 DNS 解析的过程中被人劫持并注入一些东西, 就可能会出现上述的两种情况

HTTPHTTPS 的区别

HTTP 协议或者说 超文本传输协议 是通过明文的方式发送内容的, 不提供任何方式的数据加密, 如果有攻击者截取到了浏览器和服务器之间的传输报文, 就可以直接读懂其中的信息, 这对我们一些如: 住址、卡号、密码等敏感数据来说是非常不安全的. 为了解决这一个缺陷, 就需要使用另一种协议 HTTPS 安全套接字层超文本传输协议, 为了数据传输安全, HTTPSHTTP 的基础上加入了 SSL 协议, SSL 依靠证书来验证服务器身份, 并为浏览器和服务器之间传递的数据加密

相对于 HTTP 来说, HTTPS 更加安全、更加可靠, 谷歌 曾明确表示: “希望所有站长都是使用 HTTPS, 而非 HTTP“; 其搜索引擎在算法更新中也表示: “同等条件下,使用HTTPS加密技术的站点在搜索排名上更具优势”. 这两点可以看出其对 HTTPS everywhere 这一目标的决心

使用阿里云 API 申请 Let’s Encrypt 泛域名免费 SSL 证书

SSL 证书是部署 HTTPS 的必要条件, 由受信任的数字证书颁发机构 CA,在验证服务器身份后颁发. Let's Encrypt 是一个个免费、自动化、开放的证书签发服务。它由 ISRGInternet Security Research Group,互联网安全研究小组)提供服务,而 ISRG 是来自于美国加利福尼亚州的一个公益组织。Let's Encrypt 得到了 Mozilla、Cisco、Akamai、Electronic Frontier FoundationChrome 等众多公司和机构的支持.

安装依赖和申请工具
1
sudo apt-get update && sudo apt-get install curl cron socat -y
1
curl https://get.acme.sh | sh
导入阿里的 Key 和 Secret

使用 阿里云API 申请 Let's Encrypt 需要提供阿里云的 KeySecret [传送门])(https://usercenter.console.aliyun.com/#/manage/ak) 直接登录就可以申请, 获取到 KeySecret 后导入到环境变量中

1
2
export Ali_Key="xxxxx"
export Ali_Secret="xxxxx"
申请证书和设置定时重新申请
1
~/.acme.sh/acme.sh --issue --dns dns_ali -d domain.com -d '*.domain.com'

出现以下图片内容就表示成功了

images

通过 Let's Encrypt 申请的 SSL 证书有效时间只有 90 天, 所以到时间后需要重新申请一次, 但是这样太麻烦了. 不过 acme.sh 脚本已经帮我们做好了这一步, 只需要执行一个命令就可以了:

1
/home/ubuntu/.acme.sh/acme.sh  --install-cert  -d domain.com --key-file   /home/ubuntu/ssl/domain.com/domain.com.key --fullchain-file /home/ubuntu/ssl/domain.com/domain.com.cer --reloadcmd  "sudo service nginx force-reload"

images

成功之后执行 crontab -l 可以看到有一个定时任务, 证书到期会自动续签

images

参考资料

使用阿里云域名api申请Let’s Encrypt泛域名免费ssl证书