简单记录阿里云ECS配置let's encrypt证书
2017-12-20 11:27更新
不知道有没有过1个小时,但是试了下去掉--dry-run后,直接显示申请成功。
之后按照之前弄的nginx的配置,配置下新的域名,重启nginx搞定。
2017-12-20 11:20更新
今天要添加另一个域名,一直用网上找到的各种带--nginx
参数的命令,
一直都报错
Domain: xxx.yy
Type: unauthorized
Detail: Incorrect validation certificate for tls-sni-01 challenge.
Requested
******************************************************************.acme.invalid
from xxx.xxx.xxx.xxx:443. Received 1 certificate(s), first
certificate had names
"******************************************************************.acme.invalid,
dummy"
后面又开始报错什么太多requests,之后得知是申请证书失败的次数太多,已经被拒了,下次尝试时,一定记得加上--dry-run
参数,可以测试是否成功,成功后,直接去掉该参数,就可以只申请一次。
之后看到
https://stackoverflow.com/questions/45906369/lets-encrypt-check-the-previous-certificat-and-throw-an-error
中问题的评论有一个命令,去掉--nginx
改用--webroot -w /home/xxx/public
,
sudo certbot certonly --webroot -w /home/xxx/public -d xxx.yy
但是报错Invalid response from http://xx.xx/.well-known/acme-challenge/nJft0J8ESp_VxSLq5HuFUg0qZo2ylsEyNvjHhgy6RG0
,试着访问这个网址,nginx返回403错误,之后在https://github.com/letsencrypt/acme-spec/issues/221这里看到,在nginx的配置中加上
location ^~ /.well-known/acme-challenge/ {
# the usual settings
}
再运行命令,提示- The dry run was successful.
等下午证书请求限制解除后,再去掉--dry-run
参数。
==========================================
2017-12-7更新
6号证书到期,今天找了半天怎么续期,一直报错。
最后去certbot官网,一条命令搞定certbot renew
==========================================
安装certbot
certbot官网选择正确好,按照流程安装,
https://certbot.eff.org/#centosrhel7-nginx
按照后运行
sudo certbot --nginx certonly
此时提示pyopenssl
版本低,但是yum
更新却提示已经是最新
之后按照网上的搜索结果,尝试过pip
安装certbot
,一直各种包错误。
之后按照https://www.yuzhi100.com/article/centos-7-certbot-pyopenssl-missing-required-functionality的方法手动更新pyopenssl
之后又提示'module' object has no attribute 'SSL_ST_INIT'
网上搜索无果,之后好像是通过更新了一个python模块才行的具体哪个忘了
之后运行命令,提示nginx配置文件找不到,要在命令后面指定nginx配置文件,
如下:
sudo certbot --nginx certonly --nginx-server-root /usr/local/nginx/conf
之后填写一些信息,邮箱什么的,到最后选择nginx配置中哪个域名用来生成证书,结果一直出错,提示timeout
。
网上有的说是阿里的dns问题,有的说国内几个常用的dns都不行。
把域名的dns解析换成CloudXNS
后,还是不行。
最后在阿里云ECS发现没有打开443端口,之前一直以为这个端口可能默认就打开了,所以没考虑这个问题,果然打开这个端口之后就生成成功了。
之后配置nginx,完全按照https://www.freehao123.com/lets-encrypt/中第 四—8 点配置,配置完后,发现网站首页怎么都显示不安全,折腾一阵之后无果。结果同事用360浏览器打开时,提示网站中包含不安全的内容。
经过排查,发现首页中"QQ交谈"这个按钮的图片是http的,把代码中的http改成https之后,自动获取的那个图片还是http的,结果直接把该图片的地址加个s之后,放到相应的img标签中,搞定。
最后,参考https://laravel-china.org/topics/206/deploying-https-and-security-tuning-under-nginx,把http自动跳转到https。