The Internet has made the world today, and today’s world has made the Internet
最近帮朋友写了个小程序, 写完啦, 要测试啦. 没有 https
证书!! 我个人比较喜欢把测试代码放到自己的服务器上, 这样方便我自己修改 (PS: 自己的服务器嘛, 想怎么来怎么来). 所以得想办法整个 https
证书. 本来想看看网上有没有免费的, 一个不小心就 Google
到阿里云就有免费的证书. 刚好服务器是阿里的, 域名也是阿里的. 所以决定整一个用用
网站部署 HTTPS
的重要性
互联网造就了很多产业, 也造就了很多黑产业. 让我们想象一下: 当我们访问淘宝、京东的时候. 右下角漂浮着 “大家好我是渣渣辉, 是兄滴就来啃我”. 这种感觉肯定特别的酸爽 (PS: 哈哈哈哈哈, 要真是这样张家辉肯定还会火点). 或者我们再来想象一下: 当我们输入银行的网址后打算转账的时候, 卡号输了、密码输了、钱没到账不说, 银行卡里一分不剩, 这是不是就很悲哀了呢
上举的两个例子其实是真实存在的. 在输入网址访问网页, 到网页返回数据给我们的过程中, 其实是分很多步骤的比如最基础的 DNS
解析 (PS: 不做详解). 如果在 DNS
解析的过程中被人劫持并注入一些东西, 就可能会出现上述的两种情况
HTTP
和 HTTPS
的区别
HTTP
协议或者说 超文本传输协议 是通过明文的方式发送内容的, 不提供任何方式的数据加密, 如果有攻击者截取到了浏览器和服务器之间的传输报文, 就可以直接读懂其中的信息, 这对我们一些如: 住址、卡号、密码等敏感数据来说是非常不安全的. 为了解决这一个缺陷, 就需要使用另一种协议 HTTPS
安全套接字层超文本传输协议, 为了数据传输安全, HTTPS
在 HTTP
的基础上加入了 SSL
协议, SSL
依靠证书来验证服务器身份, 并为浏览器和服务器之间传递的数据加密
相对于 HTTP
来说, HTTPS
更加安全、更加可靠, 谷歌 曾明确表示: “希望所有站长都是使用 HTTPS
, 而非 HTTP
“; 其搜索引擎在算法更新中也表示: “同等条件下,使用HTTPS加密技术的站点在搜索排名上更具优势”. 这两点可以看出其对 HTTPS everywhere
这一目标的决心
使用阿里云 API 申请 Let’s Encrypt 泛域名免费 SSL 证书
SSL
证书是部署 HTTPS
的必要条件, 由受信任的数字证书颁发机构 CA
,在验证服务器身份后颁发. Let's Encrypt
是一个个免费、自动化、开放的证书签发服务。它由 ISRG
(Internet Security Research Group
,互联网安全研究小组)提供服务,而 ISRG
是来自于美国加利福尼亚州的一个公益组织。Let's Encrypt
得到了 Mozilla、Cisco、Akamai、Electronic Frontier Foundation
和 Chrome
等众多公司和机构的支持.
安装依赖和申请工具
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
需要提供阿里云的 Key
和 Secret
[传送门])(https://usercenter.console.aliyun.com/#/manage/ak) 直接登录就可以申请, 获取到 Key
和 Secret
后导入到环境变量中
1 | export Ali_Key="xxxxx" |
申请证书和设置定时重新申请
1 | ~/.acme.sh/acme.sh --issue --dns dns_ali -d domain.com -d '*.domain.com' |
出现以下图片内容就表示成功了
通过 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" |
成功之后执行 crontab -l
可以看到有一个定时任务, 证书到期会自动续签