[AWS] 如何给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小时。

Leave a Reply

Your email address will not be published. Required fields are marked *