亚马逊服务器上部署SSL证书

最近工作需要在搭网站的https,先后使用了亚马逊和Let’s Encrypt的ssl证书。

亚马逊的SSL证书申请

亚马逊的服务器可以免费使用1年,国内访问速度还可以
亚马逊的ssl证书是有亚马逊管理的不能下载,只能部署在ELB上面(反正我没有找到怎么下载( ̄. ̄) )

1、打开aws顶部的服务,搜索“Certificate Manager”

2、请求证书=>请求公有证书

3、添加域名

image

多个子域名,可以一起提交

4、验证方法(DNS验证, 邮箱验证),建议邮箱验证

4.1、DNS验证需要去修改dns,添加cname,设置麻烦,验证速度慢

验证需要填写CNAME 名_x.abc.com(_x加密串),设置CNAME时,一般是填写_x,后面的abc.com省略。

我填完半小时回来看一个可以,另一个不行修改了等了2个小时。申请到通过花了4个小时。。。这个可能跟我填错有关。验证是aws定时发起的。

image
4.2、邮箱验证速度很快,只要打开邮箱收邮件就可以了

发送邮件的邮箱如下图所示,我这边用[email protected],原本已经使用了QQ的企业邮箱,所以直接收邮件就可以了,按邮箱指示操作就可以了

如果没有邮箱,可以尝试使用QQ的企业邮箱,来接邮件(本人没试过)

image

5、配置ssl证书

审核通过之后,你会发现这个没有下载证书的位置,各种中文文档也没有如何配置使用的的说明。

em....,我找了一下午,最后在google发现是配置在ELB上的。英语不好,做不了程序员了。

6、开始设置ELB:

进入EC2管理界面,负载均衡器就是ELB,创建一个HTTP/HTTPS的均衡器

image

侦听器,可以理解为nginx的listen 80,如果有https可以增加/修改成443。
可用区,我还没具体用上,使用选择最大的两个。

image

这一步,就可以选择你申请的证书了。

然后下一步配置安全规则,记得安全规则需要开启对应的端口,80或者443。

image

配置路由,目标组就是配置web服务器的被映射的端口。
请求先到ELB的80/443端口,再转的web服务器的80或者其他端口。

ELB有个好处,配置了ssl,映射到web服务器时就不用再配置https了,ELB已经帮忙验证ssl了。

这里还有可以配置web服务器的状态监测。

image

注册目标,配置接收映射的服务器。如果“已注册目标”为空,访问网站就会503。

最后审核过了,就配置上去了。
不过这时还没完成,重新进入负载均衡器的管理界面,点击刚才创建的均衡器。

image

复制下面的DNS,放浏览器打开网页看看,可以看到正常网页,表示可以了。
如果不行看看,看看均衡器和目标群组配置是否正确
网页可以正常打开,就到域名管理后台是配置CNAME,就可以了。

我这边遇到了无法解决问题。
godaddy禁止CNAME主域名,就是无法将abc.com CNAME 到 amazonaws.com。
另一个域名运营商是可以的。

如果使用亚马逊的ssl证书,要注意主域名的问题,二级域名就无所谓了。
PS:亚马逊的的ELB只有15G的免费流量;

因为无法解析主域名的问题,我重新去找ssl证书

Let’s Encrypt 证书申请使用

我使用来certbot申请证书

github: https://github.com/certbot/certbot
官网: https://certbot.eff.org/

先安装certbot

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

申请证书

sudo ./certbot-auto certonly --standalone --email [email protected] -d abc.com -d www.abc.com

执行上面指令,按提示操作。
Certbot 会启动一个临时服务器来完成验证(会占用80端口或443端口,因此需要暂时关闭 Web 服务器),然后 Certbot 会把证书以文件的形式保存,包括完整的证书链文件和私钥文件。
文件保存在 /etc/letsencrypt/live/ 下面的域名目录下。

需要把要申请证书的域名先解析到这台服务器上,才能申请。

修改nginx配置

server{
    listen 80;
    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/abc.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/abc.com/privkey.pem;

    server_name abc.com www.abc.com;
    root /web/abc.com/;
}

证书自动续期

证书有效期是3个月,把下面命令加到crontab,每2个月执行一次。

certbot-auto renew //刷新指令

自动读取nginx配置申请证书

certbot-auto --nginx 会自动读取nginx的配置,按提示申请证书。

下面命令会自动创建定时任务

certbot-auto renew --dry-run 

不重启申请证书

修改nginx配置,增加

location ^~ /.well-known/acme-challenge/ {
   default_type "text/plain";
   root     /usr/share/nginx/html;
}

重启nginx,执行 certbot-auto certonly --webroot -w /usr/share/nginx/html/ -d www.abc.com

你可能感兴趣的:(亚马逊服务器上部署SSL证书)