- Published on
如何给 EC2 的服务使用 HTTPS?
现在已经是全民 HTTPS 时代了。不使用 HTTPS 协议基本就是等于在公网上裸奔。据说现在有些地区故意不推 HTTPS,这样就可以更方便监控网民的上网行为。
有个小科普
HTTPS 是 HTTP 协议的加密版本,是由网络协议应用层的 HTTP 协议加上传输层的 TLS 或者 SSL 协议组成的。
同理,FTPS 协议其实 FTP + TLS/SSL 协议。注意 SFTP 是另外一种实现方法,是属于 SSH 家族的。
SSL 协议已经被淘汰了,现在一般使用 TLS1.2 以上的版本。比如我这个网站是有 apache 服务器驱动,就完全弃用了 SSL 协议。
⚠️等等! 我知道这些有啥用。
没啥,如果你爹妈用 IE6 或者 IE8 打开某些只支持 HTTPS 的网站,他们会问你怎么会“无法打开网页”。其实这就说明了浏览器可能完全不支持 TLS(IE6),支持的 TLS 版本太低(IE8)。你可以点这里了解更多。
没啥,如果你做后端开发。在使用一些数据库第三方连接库的时候,可能会遇到一些 TLS/SSL 协议版本的问题。这个问题可能是你的宿主机底层的 OpenSSL 太高或则太低,导致和你的第三方连接库代码不兼容。你可以点这里,看看自己能不能感受这个酸度,特别是部署代码的时候。
那问题来了,有了 TLS 就安全了么?来看一看 2014 年的心脏出血漏洞(Heartbleed bug)。现在大部分的操作系统都是使用开源的 OpenSSL 库来实现 TLS,比如 Linux,macOS 等。所以那个年代如果你的服务器不使用 OpenSSL 库其实应该是没有这个漏洞的。
正文: 如何才能低成本使用 HTTPS 协议呢?
当然要看使用 HTTPS 协议是具体什么服务。
方法一:
如果你是使用 EC2 类似的 VM,你可以找个免费证书(let's encrypt)然后在你的服务器安装 Nginx 或 Apache 反向代理到你的 HTTP 程序。这种方式耗时耗力,还要打一堆命令。Let's encrypt 只能免费使用 3 个月,你还要安装 Certbot 做自动 Review。
我这个博客网站就是按照上述做法做的,具体是使用了bitnami 一条龙服务。
💰💰 费用:只需要给 EC2 的钱 (当然流量也要钱,流入免费,流出 1 月有 1G 免费流量,具体看这里)
方法二:
如果你是使用 EC2 类似的 VM,但是你只是想让API 服务支持 HTTPS。你可以按照这个方法,把 AWS API Gateway 直接做成纯代理,把所有请求都 fowrad 到你的 EC2 端口。
⚠️ 注意:这里创建的是 RESTful API,而不是 HTTP API。关于这两个有什么不同,你可以看这篇文章。HTTP API 是纯 Proxy,更便宜性能更好,但是对比于 RESTful API 会少很多功能,所以才便宜点。
API Gateway 的强大之处在于,你把流量导向哪里都可以。我这里是导向了一个 EC2 的端口上面。
记得要在 API Gateway 创建一个 Stage,这样你就有一个默认的 HTTPS URL 了,这个 URL 是 HTTPS 的。
API Gateway 功能太强大了,给你 Throttling,RateLimit,还可以有针对不同的 User Plan 给不同的用量配置。看看 SDK Generation,你只要给 OPEN API Schema,就能生成几乎所有主流语言的 SDK。醉了。。
💰💰 费用:EC2 的钱 + API Gateway 的钱(前 3 百万的每一百万请求 1 美金左右)
总结一下:
方法一是最通用的。方法二只适合 API(Restful)之类的 HTTP 服务。
突然要感谢一下前后端分离这个设计,这样可以使用 API Gateway 服务搞定 API,静态资源直接用 S3 + CloutFront 托管就可以了。
完。
本文写作耗时约 2 小时。