随枫--博客

或许是不知梦的缘故,流离之人追逐幻影!

使用Let's Encrypt开启https(CentOS7、Nginx)

    看到很多作者说过要安装Python环境啥的,好像有好多人都卡在这里,于是博主听从别人的建议,直接就用Certbot 的 certbot-auto,参考文章见末尾。

    1.下载客户端  

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

    注意:最好是直接粘贴(想要自己敲一遍的千万看仔细了,我才不会告诉你我自己敲的把certbot敲成cerbot,然后回车告诉我找不到,当时心中十万只神兽心中飘过)

    2.证书生成

./certbot-auto certonly --agree-tos -m 邮箱地址 --webroot -w 域名的根目录 -d 带 www 你的域名 
-d 不带 www 你的域名

    注意:由于博主没有自己去安装Python环境,于是这里会安装很多东西,相关文件安装好了之后会创建Python环境,安装Python包,然后可能会等待较长时间,博主以为啥都不用管,等他自己就能搞好就出去锻炼去了,回来一看,wf,竟然有报错:

ReadTimeoutError: HTTPSConnectiionPool(host='pypi.python.org',port=443):

当然第一件事阅读报错信息,感觉是不是墙的原因,果断百度一波,果然在别的博主文章中看到有说是墙的原因,(由于博主梯子出了点问题,只能自己再试一下喽),好家伙,果然在等待过程中,出来一个y/n的提示,果断y,然后成功了congratulation,(好吧,做事还是要认真点,中途出去可能超时了)

    3.Nginx的相关修改

    跟着大佬们的步骤走哈

ssl on;
ssl_certificate /etc/letsencrypt/live/www.你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.你的域名/privkey.pem;

   加入配置之后,重启nginx(systemctl restart nginx.service),输入域名,博主以为会看到绿锁,然后并没有,可能是配置的方式不太一样吧,由于博主之前已经准备了多篇参考文章,切去下一个,嗯哼,看到一个相关配置的,多了些东西(主要还是端口),如下:

listen 443 ssl;
ssl_certificate   /etc/letsencrypt/live/{yourdomain}.com/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/{yourdomain}.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

重启,访问,还是不行啊,那直接https://域名访问,可以啊,看来是要将80的访问重定向到443,百度走你看到return 301 https://$server_name$request_uri;更改配置,重启,然而还是没有卵用,这回告诉重定向次数过多,继续寻寻觅觅 嗯哈,又发现一个:

location / {
    if ($host = "foo.domain.com"){
       return 301 https://foo.domain.com$request_uri;
    }
    if ($host = "bar.domain.com"){
       return 301 https://bar.domain.com$request_uri;
    }
}

    将相应host替换,走你,接下来是见证奇迹的时刻了,竟然成了,看到绿锁了,happy哈,感觉这样写有点多啊

location / {
    return 301 https://$server_name$request_uri;
}

走你,哈哈,木问题,ok,至于原理,等博主有机会研究nginx相关配置再说哈

    4.配置定时任务更新证书(由于默认证书是90天的,需要去自动更新)  

./certbot-auto renew

    试着更新一下,纳尼,又报错了,报错如下:Cert not yet due for renewa

    黑人问号脸,百度走你,看到一篇文章有跟我一样的情况,看到大佬的解决方式

./certbot-auto renew --force-renew

    强制执行,终于又看到恭喜了,喜出望外啊

    好了没有安装crontab的安装就好(不确定的话which crontab)crontab -e 

    加入一条任务,如下(这只是博主的配置,每个人不太一样):

15 2 * */2 *  ./certbot-auto renew --force-renew

    至于后续有什么问题,博主再补充


    参考:

    https://housanpai.com/articles/1

    https://laravel-china.org/articles/5883/give-your-website-a-https-certificate-per- second

    https://laravel-china.org/articles/2766/lets-encrypt-the-site-of-the-encrypted-tour

    https://www.zhukun.net/archives/8104