最近工作需要在搭网站的https,先后使用了亚马逊和Let’s Encrypt的ssl证书。
亚马逊的SSL证书申请
亚马逊的服务器可以免费使用1年,国内访问速度还可以
亚马逊的ssl证书是有亚马逊管理的不能下载,只能部署在ELB上面(反正我没有找到怎么下载( ̄. ̄) )
1、打开aws顶部的服务,搜索“Certificate Manager”
2、请求证书=>请求公有证书
3、添加域名
多个子域名,可以一起提交
4、验证方法(DNS验证, 邮箱验证),建议邮箱验证
4.1、DNS验证需要去修改dns,添加cname,设置麻烦,验证速度慢
验证需要填写CNAME 名_x.abc.com(_x加密串),设置CNAME时,一般是填写_x,后面的abc.com省略。
我填完半小时回来看一个可以,另一个不行修改了等了2个小时。申请到通过花了4个小时。。。这个可能跟我填错有关。验证是aws定时发起的。
4.2、邮箱验证速度很快,只要打开邮箱收邮件就可以了
发送邮件的邮箱如下图所示,我这边用admin@abc.com,原本已经使用了QQ的企业邮箱,所以直接收邮件就可以了,按邮箱指示操作就可以了
如果没有邮箱,可以尝试使用QQ的企业邮箱,来接邮件(本人没试过)
5、配置ssl证书
审核通过之后,你会发现这个没有下载证书的位置,各种中文文档也没有如何配置使用的的说明。
em....,我找了一下午,最后在google发现是配置在ELB上的。英语不好,做不了程序员了。
6、开始设置ELB:
进入EC2管理界面,负载均衡器就是ELB,创建一个HTTP/HTTPS的均衡器
侦听器,可以理解为nginx的listen 80,如果有https可以增加/修改成443。
可用区,我还没具体用上,使用选择最大的两个。
这一步,就可以选择你申请的证书了。
然后下一步配置安全规则,记得安全规则需要开启对应的端口,80或者443。
配置路由,目标组就是配置web服务器的被映射的端口。
请求先到ELB的80/443端口,再转的web服务器的80或者其他端口。
ELB有个好处,配置了ssl,映射到web服务器时就不用再配置https了,ELB已经帮忙验证ssl了。
这里还有可以配置web服务器的状态监测。
注册目标,配置接收映射的服务器。如果“已注册目标”为空,访问网站就会503。
最后审核过了,就配置上去了。
不过这时还没完成,重新进入负载均衡器的管理界面,点击刚才创建的均衡器。
复制下面的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 admin@abc.com -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