AWS中国区使用https访问部署在S3上的网站

问题描述

最近一个项目需要通过https的方式访问部署在S3上的网站,通过搜索引擎找到一篇文章,可以在AWS Global实现整个过程。但是目前AWS中国区限制,CloudFront不能使用AWS Certificate Manager自己颁发的证书

解决思路

  • 申请一个免费证书
  • 导入到AWS IAM Certificate Store中
  • 配置CloudFront使用整个证书
  • Route53执行CloudFront

解决方案步骤

申请免费证书

https://letsencrypt.org/ 可以申请免费的短期证书(90天有效期),不需要公司证明等繁杂的手续,但需要证明这个域名是你的。
为了这个证书属于你,需要先让 http://your_domain_name 能够访问。
因为letsencrypt提供的certbot工具,支持自动配置nginx服务器,所以选择nginx作为网站服务器

在AWS中国区启动一台ubuntu 20.04的EC2


在配置EC2的security group的时候,确保80和443端口是开发的

在EC2上安装nginx

可根据这篇文章在ubuntu 20.04上安装配置nginx
确保执行以下命令,可以有html返回:

curl -i 127.0.0.1

回到AWS Console -> Route53,配置一条A记录,指向EC2,例如:

配置成功后,等DNS同步结束,就可以通过http方式访问你架设的nginx服务器了

安装certbot

certbot(letsencrypt官网指定的客户端)需要通过snap安装

sudo apt update
sudo apt install snapd

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot --version # check if installed successfully

(注:如果碰到snap安装慢的问题,可以考虑通过这篇文章提供的方式解决)

生成证书

可参考这篇文章,其实做到这步,你只需要执行一行命令即可:

sudo certbot --nginx # 按照向导提示选择正确的nginx网站

证书生成后,路径在这里: /etc/letsencrypt/live/{your_domain_name}/ 把该目录下的所有文件拷贝到本地主机的一个目录下,下一个步骤需要使用
(注:这个目录为隐藏目录,需要用sudo进行查看,可以用sudo cat ...命令查看每个文件内容并保存到本地)

sudo ls /etc/letsencrypt/live/{your_domain}/
sudo cat /etc/letsencrypt/live/{your_domain}/cert.pem

文件有: cert.pem chain.pem fullchain.pem privkey.pem

导入证书到IAM Certificate Store

参考这篇文章

aws iam upload-server-certificate --server-certificate-name SandboxSpaCertName --certificate-body file://cert.pem --private-key file://privkey.pem --certificate-chain file://chain.pem --path /cloudfront/sandbox/ 

配置CloudFront

回到AWS Console -> CloudFront, 创建一个distribution指向你的S3网站, 其中最关键的步骤是:使用Custom SSL Certificate:

1.替换成你的域名
2.选择Custom SSL Certificate
3.选择之前导入到IAM certificate store里面的证书
4.等待distribution部署完毕

配置Route53

回到AWS Console -> Route53: 创建一条cname指向CloudFront那条新创建的distribution

写在最后

这个问题,也许在AWS中国区后续的版本中能够解决。在这之前,如果你也遇到同样的问题,希望这篇文章可以帮到你。欢迎留言交流!

posted @ 2020-12-08 15:33  bingliang  阅读(1040)  评论(0编辑  收藏  举报